PHP - preg_match for(string),(string),

时间:2013-08-31 03:07:34

标签: php preg-match

这是我的字符串:

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

我想要括号内的字符串。意思是:

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

等...请注意,括号内可以是除(和)之外的任何字符。

2 个答案:

答案 0 :(得分:2)

如果你想要一个纯粹的RegEx答案,你可以使用lookahead / lookbehind断言:

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

答案 1 :(得分: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
)