正则表达式,部分表达式的负前瞻

Regex, negative lookahead for a part of expression

我正在使用正则表达式模式评估表达式。 在表达中,我有话。我想禁止一些保留字,如 truefalse (但我想接受像 obstrue[=26= 这样的字]nt)

所以我定义了一个单词的模式:

(?!^true$)(?!^false$)[^ =]{1,50}

好的,这适用于单个单词,但不适用于计算表达式。 让我们假设一个表达式总是一个赋值,这个模式

((?!^true$)(?!^false$)[^ =]{1,50})=((?!^true$)(?!^false$)[^ =]{1,50})

不起作用。事实上它匹配 true=false

我该怎么做才能避免这个问题?谢谢

在一般情况下,您需要在此处使用自定义边界,因为您的单词是字符块而不是空格和 =:

(?<![^\s=])(?!(?:true|false)(?![^=\s]))[^\s=]{1,50}(?![^=\s])

参见regex demo

详情

  • (?<![^\s=]) - 字符串中除空格和 =
  • 之外没有紧跟字符的位置
  • (?!(?:true|false)(?![^=\s])) - 紧靠右侧,不应有 truefalse 后跟 =、空格或字符串结尾
  • [^\s=]{1,50} - 除空格和 =
  • 之外的五十个字符
  • (?![^=\s]) - 紧靠右边,除 = 或空格外不应有其他字符。

要验证分配,您可以使用

^(?!(?:true|false)=)[^\s=]{1,50}=(?!(?:true|false)$)[^\s=]{1,50}$

regex demo

这里,在开始时,truefalse 在右边用 = 限制,然后在右边用 $ (结束字符串)。