正则表达式,部分表达式的负前瞻
Regex, negative lookahead for a part of expression
我正在使用正则表达式模式评估表达式。
在表达中,我有话。我想禁止一些保留字,如 true 和 false (但我想接受像 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]))
- 紧靠右侧,不应有 true
和 false
后跟 =
、空格或字符串结尾
[^\s=]{1,50}
- 除空格和 =
之外的五十个字符
(?![^=\s])
- 紧靠右边,除 =
或空格外不应有其他字符。
要验证分配,您可以使用
^(?!(?:true|false)=)[^\s=]{1,50}=(?!(?:true|false)$)[^\s=]{1,50}$
这里,在开始时,true
或 false
在右边用 =
限制,然后在右边用 $
(结束字符串)。
我正在使用正则表达式模式评估表达式。 在表达中,我有话。我想禁止一些保留字,如 true 和 false (但我想接受像 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]))
- 紧靠右侧,不应有true
和false
后跟=
、空格或字符串结尾[^\s=]{1,50}
- 除空格和=
之外的五十个字符
(?![^=\s])
- 紧靠右边,除=
或空格外不应有其他字符。
要验证分配,您可以使用
^(?!(?:true|false)=)[^\s=]{1,50}=(?!(?:true|false)$)[^\s=]{1,50}$
这里,在开始时,true
或 false
在右边用 =
限制,然后在右边用 $
(结束字符串)。