正则表达式^.+=[^=].+$为何匹配含多个=的字符串?
正则表达式匹配异常的原因及修正
你的正则^.+=[^=].+$能匹配abc==qww,核心问题是**.+的贪婪匹配特性**:
.+是贪婪量词,会尽可能匹配最多的任意字符(除换行)。处理abc==qww时,它不会停在第一个=前,而是会匹配到第二个=的前一个字符(也就是abc=);- 剩下的字符串
=qww里,=刚好匹配正则中的=,[^=]匹配q,最后的.+匹配ww,整个字符串就被完整匹配了。
修正方案
如果要确保=后面紧跟的不是=,同时结构为「任意内容 + 单个= + 非=开头的任意内容」,可以用两种方式调整:
- 改用非贪婪量词:
^.+?=[^=].+$。+?是非贪婪模式,会匹配最少的字符,确保第一个=就是目标分隔符; - 更精确限制前面的内容:
^[^=]+=[^=].+$。把前面的.+换成[^=]+,确保分隔符前的内容不含=,从根源避免贪婪匹配的问题。
内容的提问来源于stack exchange,提问作者Floris
相关产品推荐
相关产品推荐

