内容是这样的
一些内容和一些123%b1%以及一些内容%b2%%b3%
我希望匹配%b1%或%b2%...
以外的内容我试过
([^(?:%b\d+%)]+)
但不包括数字“123”。
如何匹配不包含“%b \ d +”的内容?
感谢。
答案 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是如何做到的。