为什么此正则表达式不会对此字符串返回true:X1_Y1
'.*X1_(?!(Y3|_))(_.*|$)'
由于X1_在命中下划线或字符串末尾之前未跟随Y3,因此字符串X1_Y1应该是匹配的。我的正则表达式出了什么问题?
答案 0 :(得分:0)
在你给的正则表达式中,没有什么能与Y1
部分相匹配。 _
已匹配X1_
,因此_.*
部分不匹配,$
将无法匹配,因为之前仍有Y1
字符串的结尾。
答案 1 :(得分:0)
您的表达可以简化:
.*X1_(?!(Y3|_))(_.*|$)
等效(用于匹配目的并忽略捕获组):
X1_(?!Y3)(?!_)(_.*|$)
由于否定前瞻不允许X1_
之后的字符成为下划线,因此进一步简化为:
X1_(?!Y3)(?!_)$
由于此表达式需要X1_
来结束字符串,因此负向前瞻不再起作用。表达式简化为:
X1_$
据推测,这不是预期的目的。