我正在尝试使用正则表达式匹配单词'begin'和'end'之间不是'+'的任何字符,但由于某种原因它不匹配。我做错了什么?
$content = "begin+text1+end begin text2 end";
$regex = "~begin(^\++?)end~";
preg_match_all($regex, $content, $matches);
print_r($matches);
结果:
Array ( [0] => Array ( ) [1] => Array ( ) )
预期结果:
Array ( [0] => Array ( begin text2 end ) [1] => Array ( text2 ) )
答案 0 :(得分:2)
您需要将锚^
放在字符类中以创建否定的字符类:
"~begin([^+]+)end~"
答案 1 :(得分:0)
如果稍微更改模式,则应获得预期结果:
(?=[^\s\d]+)begin([^+\n]+)end
此模式使用正向前瞻 - 断言空格或数字将在单词begin
之前反向匹配。然后,捕获组会在该end
之间抓取任何不包含+
或换行符\n
的内容。
<强>结果强>:
Array ([0] => begin text2 end)[1] => Array([0] => text2))
示例强>: