正则表达式:
/''+[^f]/g
当应用于字符串时:
don't '''theater''' but not'''d and not do'''f
还匹配do'''f
中的三个撇号。为什么[^f]
没有将其排除?
附注:我想找到连续两个或更多的撇号,后面不是f。
正则表达式:
/''+[^f]/g
当应用于字符串时:
don't '''theater''' but not'''d and not do'''f
还匹配do'''f
中的三个撇号。为什么[^f]
没有将其排除?
附注:我想找到连续两个或更多的撇号,后面不是f。
+
表示正则表达式引擎在发现2个或更多'
后遇到一个f
时会回溯一次。你可以通过在负向前瞻中添加一个'
的选择项来防止这种情况的发生(这样可以避免消耗除f
和'
之外的字符,使用[^f]
时,该字符变为匹配的一部分,因为否定字符类是一种“消耗”模式,而前瞻则是零宽断言)。
''+(?!['f])
(?!['f])
将阻止匹配,如果有2个或更多的'
符号后跟着f
或'
。此外,您还可以使用限定量词{2,}
(表示2次或更多出现)来编写它:'{2,}(?!['f])
。''++(?!f)
^^
请查看另一个演示(另一种编写方式是'{2,}+(?!f)
)。
如果您使用的是不支持占有量词的.NET正则表达式库,则可以改用原子组(其工作方式与占有量词相同,但适用于整个组):
(?>'{2,})(?!f)
查看.NET正则表达式演示。
f
的字符。f
的字符”。f
,而是撇号。因此,如果你想排除最后一个匹配,你可能更喜欢这个正则表达式''+[^'f]。
f
的字符(第三个撇号)... - deceze'
匹配第一个单引号,'+
匹配第二个单引号,而[^f]
则匹配第三个单引号... - kennytm