我有一个看起来像的字符串:
aaaaaaaa'bbbbbbbb? 'cccccccccccc'ddddddddd'
我希望'
分隔所有匹配,而不是?'
转义的匹配
我设法使用这个表达式:
(.*?)[^\\?]'
我在regexpal上测试了它,似乎工作正常。
尝试使用preg_match
将其应用于我的PHP代码时,我只获得第一个匹配。
这是我的代码:
preg_match ("/(.*?)[^\\?]'/i", $content, $matches);
print_r($matches);
结果是:
Array
(
[0] => aaaaaaaaaaaaaaaa'
[1] => aaaaaaaaaaaaaaa
)
我希望得到bbbbbbbb?'cccccccccccc'
和ddddddddd'
。
我究竟做错了什么?感谢。
答案 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
)