我尝试通过正则表达式匹配以下字符串:
;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) 标志的各种解决方案,但没有成功。
最佳答案
您正在使用greedy
量词,因此您的模式(\d|\D)
匹配所有内容,直到找到最后一个ENDIF
.
如果您希望正则表达式在第一个 ENDIF
处停止匹配,则需要使用不情愿的量词 - +?
: -
;\s*IF (\d|\D)+? ENDIF
关于java - 多行正则表达式匹配问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14606800/