正则表达式PHP只获得第一场比赛

时间:2014-02-05 12:06:59

标签: php regex preg-match

我有一个看起来像的字符串:

  

aaaaaaaa'bbbbbbbb? 'cccccccccccc'ddddddddd'

我希望'分隔所有匹配,而不是?'转义的匹配

我设法使用这个表达式:

(.*?)[^\\?]'

我在regexpal上测试了它,似乎工作正常。

尝试使用preg_match将其应用于我的PHP代码时,我只获得第一个匹配。

这是我的代码:

preg_match ("/(.*?)[^\\?]'/i", $content, $matches);
print_r($matches);

结果是:

Array
(
    [0] => aaaaaaaaaaaaaaaa'
    [1] => aaaaaaaaaaaaaaa
)

我希望得到bbbbbbbb?'cccccccccccc'ddddddddd'。 我究竟做错了什么?感谢。

3 个答案:

答案 0 :(得分:3)

您可以在negative lookbehind中使用此preg_match_all正则表达式:

$s = "aaaaaaaa'bbbbbbbb?'cccccccccccc'ddddddddd'";
if (preg_match_all("/(.*?)(?<!\?)'/", $s , $m ))
    print_r($m[1]);

或使用preg_split

$arr = preg_split("/(?<!\?)'/", $s, -1, PREG_SPLIT_NO_EMPTY);

输出

Array
(
    [0] => aaaaaaaa
    [1] => bbbbbbbb?'cccccccccccc
    [2] => ddddddddd
)

答案 1 :(得分:1)

使用preg_match_all()获取所有匹配而不是一个

$content = "aaaaaaaa'bbbbbbbb?'cccccccccccc'ddddddddd'";
preg_match_all("/(.*?)[^\\?]'/i", $content, $matches);
print_r($matches);

结果

Array ( 
        [0] =>
                Array ( 
                        [0] => aaaaaaaa' 
                        [1] => bbbbbbbb?'cccccccccccc' 
                        [2] => ddddddddd' 
                        ) 
        [1] => 
                Array ( 
                        [0] => aaaaaaa 
                        [1] => bbbbbbbb?'ccccccccccc 
                        [2] => dddddddd 
                        ) 
    )

答案 2 :(得分:0)

只需您可以尝试

$s = "aaaaaaaa'bbbbbbbb?'cccccccccccc'ddddddddd'";
$arr = preg_split("/[^?]'/", $s, -1, PREG_SPLIT_NO_EMPTY);

输出数组

Array
(
    [0] => aaaaaaa
    [1] => bbbbbbbb?'ccccccccccc
    [2] => dddddddd
)