如何编写一个匹配所有char序列的正则表达式,而没有' aaa'

时间:2015-01-15 12:02:23

标签: regex

我尝试用负向前瞻来写,但以下正则表达式不起作用:

^.+(?!aaa).+$

它会计算所有序列。如何修改?

2 个答案:

答案 0 :(得分:4)

您需要做的就是向前瞻小组添加.*

^(?!.*aaa).+$
  • (?!.*aaa)负向前看可确保字符串
  • 中没有aaa

Regex Demo

问题^.+(?!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