匹配任何不是加号的字符
Matching any characters that's not a plus sign
我正在尝试使用正则表达式来匹配单词 '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 ) )
您需要将锚点 ^
放在字符 class 中以创建否定字符 class:
"~begin([^+]+)end~"
如果稍微改变模式,您应该会得到预期的结果:
(?=[^\s\d]+)begin([^+\n]+)end
此模式使用正向先行 - 断言 space 或数字将在单词 begin
之前反向匹配。捕获组然后抓取那个和 end
之间不包含 +
或换行符 \n
.
的任何内容
结果:
Array ([0] => begin text2 end)[1] => Array([0] => text2))
示例:
我正在尝试使用正则表达式来匹配单词 '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 ) )
您需要将锚点 ^
放在字符 class 中以创建否定字符 class:
"~begin([^+]+)end~"
如果稍微改变模式,您应该会得到预期的结果:
(?=[^\s\d]+)begin([^+\n]+)end
此模式使用正向先行 - 断言 space 或数字将在单词 begin
之前反向匹配。捕获组然后抓取那个和 end
之间不包含 +
或换行符 \n
.
结果:
Array ([0] => begin text2 end)[1] => Array([0] => text2))
示例: