2013-08-31 24 views
2

这是我的字符串:PHP - 为的preg_match(串),(串),

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

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

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

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

回答

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

+0

太棒了!非常感谢你! –

0

下面是一个其他溶液中使用explode()

<?php 

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

?> 

OUTPUT:

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