2

これは私の文字列です:

(name1=value1),(name1=value1a,value1b,value1c),(name2=value2),...

括弧内の文字列が必要です。これらを意味します:

name1=value1
name1=value1a,value1b,value1c
name2=value2

など...括弧内には ( および ) を除く任意の文字を使用できることに注意してください。

4

2 に答える 2

2

純粋な正規表現の回答が必要な場合は、先読み/後読みアサーションを使用できます。

preg_match_all("/(?<=\().*(?=\))/U", $text);

これの意味は:

(?<=\()      A '(' character at the beginning
.*           Anything
(?=\))       A ')' character at the end

そしてU最後の は「貪欲」ではないことを意味します。つまり、最初と最後の括弧内のすべてに一致するわけではありません。

コードは次のとおりです。

$text = "(name1=value1),(name1=value1a,value1b,value1c),(name2=value2)";
preg_match_all("/(?<=\().*(?=\))/U", $text, $matches);
print_r($matches);

そして出力:

Array
(
    [0] => Array
        (
            [0] => name1=value1
            [1] => name1=value1a,value1b,value1c
            [2] => name2=value2
        )

)

https://eval.in/46107

于 2013-08-31T03:21:31.440 に答える
0

を使用した他のソリューションは次のexplode()とおりです。

<?php

  $str="(name1=value1),(name1=value1a,value1b,value1c),(name2=value2)";
  $str = substr($str, 1, -1);
  $results=explode('),(', $str );

?>

出力:

Array
(
    [0] => name1=value1
    [1] => name1=value1a,value1b,value1c
    [2] => name2=value2
)
于 2013-08-31T03:28:52.137 に答える