0

コンマまたはコンマとスペースで区切られた文字列を抽出する必要があります。例:

<?php
    //regexp
    $regexp = "/(select\s+(?<name>[a-z0-9]+)\s+(?<values>[^\d]+[a-z0-9]+\s*(\s*,|\s*$)))/";
    //text
    $text = "select this string1,string_2,string_3 ,string_4, string5,string_6";
    //prepare
    $match = array();
    preg_match( $regexp , $text , $match );
    //print
    var_dump( $match);
?>

この正規表現を作成しました:

(?<values>[^\d]+[a-z0-9]+\s*(\s*,|\s*$))

しかし、これは完全には機能しません。

ありがとう!

4

2 に答える 2

4

これにはpreg_splitを使用します。

$text = "select this string1,string_2,string_3 ,string_4, string5,string_6";
$stringArray = preg_split("/,\s*/",$text);

しかし、カンマごとに分割してから結果をトリミングする方がはるかに簡単です。

$stringArray = explode(",",$text);
于 2013-05-15T16:52:34.350 に答える
1

~(?|select ([^\W_]+) | *([^\W,]+) *,?)英数字のみを取得することを確認したい場合は、 のようなものを使用することをお勧めします。例:

$subject = 'select this string1,string_2,string_3 ,string_4, string5,string_6';
$pattern = '~(?|select ([a-z][^\W_]*+) | *+([a-z][^\W,_]*+) *+,?)~i';

preg_match_all($pattern, $subject, $matches);

if (isset($matches[1])) {
    $name = array_shift($matches[1]);
    $strings = $matches[1];
}

または別の方法:

$pattern = '~select \K[a-z][^\W_]*+| *+\K[a-z][^\W,]*+(?= *,?)~';
preg_match_all($pattern, $subject, $matches);

if (isset($matches[0])) {
    $name = array_shift($matches[0]);
    $strings = $matches[0];
}
于 2013-05-15T17:17:10.887 に答える