[英]Multiline Regex Matching Issue
我想通过正则表达式匹配以下字符串:
;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
为止。
您需要使用reluctant quantifier - +?
如果您希望正则表达式在第一个ENDIF
处停止匹配:-
;\s*IF (\d|\D)+? ENDIF
使用非贪婪的限定词。
;\s*IF (\d|\D)*? ENDIF
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.