php 正则表达式:在负回顾中替代反向引用
php regex: Alternative to backreference in negative lookbehind
我想查找捕获的组没有出现在字符串后面的实例:
aaaBbb = CccBbb <- format is valid, skip
aaaDddd = CccDddd <- format is valid, skip
aaaEeee = CccFfff <- format is not valid, match this one only
所以这匹配了我不想匹配的行 (https://regex101.com/r/lon87L/1)
/^ +\w+([A-Z][a-z+]) += +\w+$/mg
我在 https://www.regular-expressions.info/refadv.html 上读到 php 不支持负向回顾内的反向引用,但正则表达式的其他实现可以。所以像这样的东西会匹配我想要匹配的无效行,但它在 php:
中不起作用
/^ +\w+([A-Z][a-z+]) += +\w+(?<!)$/mg
除了匹配所有三行并在 php foreach 中循环匹配外,还有什么可以工作的吗?
一个选择是,在 =
之后的每个重复 \w
之前,对 $
使用负前瞻:
^ +\w+([A-Z][a-z]+) += +(?:(?!$)\w)+$
^^^^^^^^^^^^^^
https://regex101.com/r/lon87L/2
但是如果反向引用恰好出现在字符串的末尾,那只会排除匹配项。如果要确保先前匹配的短语不会在最后的 \w
中出现 任何地方 ,只需从重复组中删除 $
:
^ +\w+([A-Z][a-z]+) += +(?:(?!)\w)+$
^
尝试使用否定前瞻而不是否定回顾。它工作得同样好,而且它在 PHP.
中工作
^ +\w+([A-Z][a-z]+) += +(?!\w+).*$
我想查找捕获的组没有出现在字符串后面的实例:
aaaBbb = CccBbb <- format is valid, skip
aaaDddd = CccDddd <- format is valid, skip
aaaEeee = CccFfff <- format is not valid, match this one only
所以这匹配了我不想匹配的行 (https://regex101.com/r/lon87L/1)
/^ +\w+([A-Z][a-z+]) += +\w+$/mg
我在 https://www.regular-expressions.info/refadv.html 上读到 php 不支持负向回顾内的反向引用,但正则表达式的其他实现可以。所以像这样的东西会匹配我想要匹配的无效行,但它在 php:
中不起作用/^ +\w+([A-Z][a-z+]) += +\w+(?<!)$/mg
除了匹配所有三行并在 php foreach 中循环匹配外,还有什么可以工作的吗?
一个选择是,在 =
之后的每个重复 \w
之前,对 $
使用负前瞻:
^ +\w+([A-Z][a-z]+) += +(?:(?!$)\w)+$
^^^^^^^^^^^^^^
https://regex101.com/r/lon87L/2
但是如果反向引用恰好出现在字符串的末尾,那只会排除匹配项。如果要确保先前匹配的短语不会在最后的 \w
中出现 任何地方 ,只需从重复组中删除 $
:
^ +\w+([A-Z][a-z]+) += +(?:(?!)\w)+$
^
尝试使用否定前瞻而不是否定回顾。它工作得同样好,而且它在 PHP.
中工作^ +\w+([A-Z][a-z]+) += +(?!\w+).*$