如何匹配内容不包括字符串

时间:2011-05-21 05:08:15

标签: php regex

内容是这样的

  

一些内容和一些123%b1%以及一些内容%b2%%b3%

我希望匹配%b1%或%b2%...

以外的内容

我试过

([^(?:%b\d+%)]+)

但不包括数字“123”。

如何匹配不包含“%b \ d +”的内容?

感谢。

2 个答案:

答案 0 :(得分:0)

您的解决方案不起作用'['和']'定义匹配(或不匹配)的字符列表

一种解决方案就是否定比赛

$var !~ /%b\d+%/

这将匹配不包含%b1%,%b2%... etc

的所有内容

答案 1 :(得分:0)

我认为这是在PHP中完成的:

$str = "some content and some 123 %b1% and also some content %b2% %b3%";
$pattern = '/(?:^|(?!%b\d+%))(.*?)(?:%b\d+%|$)/';
preg_match_all($pattern, $str, $matches);
$match = implode($matches[0]);

如果没有,我很高兴听到我做错了什么。无论如何,我知道下面的Ruby解决方案可行。


原始答案:

我希望我更了解PHP,但我确信如何将这个Ruby代码转换为PHP很容易:

str = "some content and some 123 %b1% and also some content %b2% %b3%"
match = str.scan(/(?:^|(?!%b\d+%))(.*?)(?:%b\d+%|$)/).join

match然后包含:

"some content and some 123  and also some content  "

我的想法是扫描该正则表达式的所有匹配项/(?:^|(?!%b\d+%))(.*?)(?:%b\d+%|$)/,并将它们连接起来;我不知道PHP是如何做到的。