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

我的正则表达式很弱。谢谢你的帮助。(我会尽快接受)我的正则表达式很弱。谢谢你的帮助。(我会尽快接受)