正则表达式,表示部分表达的否定前瞻

时间:2020-04-07 15:21:09

标签: regex regex-lookarounds regex-group

我正在使用正则表达式模式评估表达式。 在表达中,我有话。我想禁止使用诸如 true false 之类的保留字(但我想接受obs true nt之类的字眼)

例如,我为一个单词定义此模式:

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

好的,这对于单个单词可以正常工作,但是它不能评估表达式。 让我们假设一个表达式始终是一个赋值,这种模式

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

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

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

1 个答案:

答案 0 :(得分:1)

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

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

请参见regex demo

详细信息

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

要验证分配,您可以使用

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

请参见regex demo

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