Java 多行正则表达式匹配问题
我试图通过正则表达式匹配以下字符串:Java 多行正则表达式匹配问题,java,regex,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。我尝试过使用Java Pattern.DOTALL以及(?s)标志的各种解
;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。我尝试过使用Java Pattern.DOTALL以及(?s)标志的各种解决方案,但都没有成功。您使用的是
贪婪的量词,因此您的模式(\d |\d)
匹配所有内容,直到找到最后一个ENDIF
如果希望正则表达式在第一次ENDIF
时停止匹配,则需要使用不情愿的量词-+?
:-
;\s*IF (\d|\D)+? ENDIF
您正在使用贪婪
量词,因此模式(\d |\d)
匹配所有内容,直到找到最后一个ENDIF
如果希望正则表达式在第一次ENDIF
时停止匹配,则需要使用不情愿的量词-+?
:-
;\s*IF (\d|\D)+? ENDIF
使用非贪婪限定符
;\s*IF (\d|\D)*? ENDIF
使用非贪婪限定符
;\s*IF (\d|\D)*? ENDIF
我的正则表达式很弱。谢谢你的帮助。(我会尽快接受)我的正则表达式很弱。谢谢你的帮助。(我会尽快接受)