正则表达式在字符之前找到字符串后面没有其他字符串

时间:2013-12-02 23:16:55

标签: regex regex-negation regex-lookarounds

为什么此正则表达式不会对此字符串返回true:X1_Y1

'.*X1_(?!(Y3|_))(_.*|$)'

由于X1_在命中下划线或字符串末尾之前未跟随Y3,因此字符串X1_Y1应该是匹配的。我的正则表达式出了什么问题?

2 个答案:

答案 0 :(得分:0)

在你给的正则表达式中,没有什么能与Y1部分相匹配。 _已匹配X1_,因此_.*部分不匹配,$将无法匹配,因为之前仍有Y1字符串的结尾。

答案 1 :(得分:0)

您的表达可以简化:

 .*X1_(?!(Y3|_))(_.*|$)

等效(用于匹配目的并忽略捕获组):

 X1_(?!Y3)(?!_)(_.*|$)

由于否定前瞻不允许X1_之后的字符成为下划线,因此进一步简化为:

 X1_(?!Y3)(?!_)$

由于此表达式需要X1_来结束字符串,因此负向前瞻不再起作用。表达式简化为:

X1_$

据推测,这不是预期的目的。