我尝试用负向前瞻来写,但以下正则表达式不起作用:
^.+(?!aaa).+$
它会计算所有序列。如何修改?
答案 0 :(得分:4)
您需要做的就是向前瞻小组添加.*
^(?!.*aaa).+$
(?!.*aaa)
负向前看可确保字符串aaa
问题^.+(?!aaa).+$
.
将匹配字符串中的第一个字符。
(?!aaa)
检查第一个字符是否后跟aaa
。显然,这不是我们所期望的。相反,我们需要在整个字符串中搜索sequance,而不是在第一个字符后限制搜索。
在哪里
(?!.*aaa)
将搜索范围缩放到整个字符串。答案 1 :(得分:3)
^(?:(?!aaa).)*$
你也可以尝试一下。参见演示。
https://regex101.com/r/xO3rH2/2
NODE EXPLANATION
--------------------------------------------------------------------------------
^ the beginning of the string
--------------------------------------------------------------------------------
(?: group, but do not capture (0 or more times
(matching the most amount possible)):
--------------------------------------------------------------------------------
(?! look ahead to see if there is not:
--------------------------------------------------------------------------------
aaa 'aaa'
--------------------------------------------------------------------------------
) end of look-ahead
--------------------------------------------------------------------------------
. any character except \n
--------------------------------------------------------------------------------
)* end of grouping
--------------------------------------------------------------------------------
$ before an optional \n, and the end of the
string