匹配任何不是加号的字符

时间:2015-10-28 16:38:26

标签: php regex preg-match-all

我正在尝试使用正则表达式匹配单词'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 ) )

2 个答案:

答案 0 :(得分:2)

您需要将锚^放在字符类中以创建否定的字符类:

"~begin([^+]+)end~"

答案 1 :(得分:0)

如果稍微更改模式,则应获得预期结果:

(?=[^\s\d]+)begin([^+\n]+)end

此模式使用正向前瞻 - 断言空格或数字将在单词begin之前反向匹配。然后,捕获组会在该end之间抓取任何不包含+或换行符\n的内容。

<强>结果

Array ([0] => begin text2 end)[1] => Array([0] =>  text2))

示例

https://regex101.com/r/qS6iL1/2