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

残念ながら、このパターンは 2 番目の 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 に答える