2

我有以下字符串,我试图通过正则表达式匹配:

;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) 标志的各种解决方案,但没有成功。

4

2 回答 2

3

您正在使用greedy量词,因此您的模式(\d|\D)匹配所有内容,直到找到最后一个ENDIF.

reluctant quantifier - +?如果您希望您的正则表达式首先停止匹配,则需要使用ENDIF:-

;\s*IF (\d|\D)+? ENDIF
于 2013-01-30T14:52:45.673 回答
1

使用非贪婪限定符。

;\s*IF (\d|\D)*? ENDIF
于 2013-01-30T14:57:07.970 回答