我正在使用正则表达式模式评估表达式。 在表达中,我有话。我想禁止使用诸如 true 和 false 之类的保留字(但我想接受obs true nt之类的字眼)
例如,我为一个单词定义此模式:
(?!^true$)(?!^false$)[^ =]{1,50}
好的,这对于单个单词可以正常工作,但是它不能评估表达式。 让我们假设一个表达式始终是一个赋值,这种模式
((?!^true$)(?!^false$)[^ =]{1,50})=((?!^true$)(?!^false$)[^ =]{1,50})
不起作用。实际上,它匹配 true = false
我该怎么做才能避免此问题?谢谢
答案 0 :(得分:1)
在一般情况下,您需要在此处使用自定义边界,因为您的单词是除空格和=
以外的其他字符块:
(?<![^\s=])(?!(?:true|false)(?![^=\s]))[^\s=]{1,50}(?![^=\s])
请参见regex demo。
详细信息
(?<![^\s=])
-字符串中除空格和=
之外不立即带有char的位置(?!(?:true|false)(?![^=\s]))
-紧靠右边,不应有true
和false
,其后紧跟=
,空格或字符串结尾[^\s=]{1,50}
-除空格和=
以外的其他50个字符(?![^=\s])
-在右边,除了=
或空格之外,没有其他字符。要验证分配,您可以使用
^(?!(?:true|false)=)[^\s=]{1,50}=(?!(?:true|false)$)[^\s=]{1,50}$
请参见regex demo
在这里,true
或false
在开始时用右边的=
限制,然后在右边用$
(字符串的结尾)限制。 )。