我有以下字符串,我试图通过正则表达式匹配:
;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)标志的各种解决方案,没有运气。
答案 0 :(得分:3)
您正在使用greedy
量词,因此您的模式(\d|\D)
会匹配所有内容,直到找到最后一个ENDIF
。
如果您希望正则表达式在第一个reluctant quantifier - +?
停止匹配,则需要使用ENDIF
: -
;\s*IF (\d|\D)+? ENDIF
答案 1 :(得分:1)
使用非贪婪的限定符。
;\s*IF (\d|\D)*? ENDIF