多线正则表达式匹配问题

时间:2013-01-30 14:51:06

标签: java regex

我有以下字符串,我试图通过正则表达式匹配:

;IF TEST_DATE <= 200112 THEN E>=90 AND S>=90
 OR P = "25" ENDIF
IF TEST_DATE >= 200201 AND TEST_DATE < 200407 THEN E>=89
AND S>=90 OR P = "25" ENDIF

我正在使用以下正则表达式尝试匹配分号(打算作为注释)直到第一个ENDIF:

;\s*IF (\d|\D)+ ENDIF

不幸的是,这种模式一直匹配到第二个ENDIF。我尝试过使用Java Pattern.DOTALL以及(?s)标志的各种解决方案,没有运气。

2 个答案:

答案 0 :(得分:3)

您正在使用greedy量词,因此您的模式(\d|\D)会匹配所有内容,直到找到最后一个ENDIF

如果您希望正则表达式在第一个reluctant quantifier - +?停止匹配,则需要使用ENDIF: -

;\s*IF (\d|\D)+? ENDIF

答案 1 :(得分:1)

使用非贪婪的限定符。

;\s*IF (\d|\D)*? ENDIF