次のテキストの「ダイニング:」に続く数字を解析しようとしています。したがって、「666」が返されます。
MAIN LEVEL
Entrance: 11
Dining: 33
SECOND LEVEL
Entrance: 4444
Living: 5555
Dining: 666
THIRD LEVEL
Dining: 999
Kitchen: 000
Family: 33332
次のようなものを使用すると(?:\bDining:\s)(.*\b)
、MAIN の下で最初に発生したものがキャプチャされます。したがって、正規表現で指定しようとしてSECOND LEVEL
おり、その後に、改行、複数のスペース、および任意のテキストの繰り返しパターンが続きますDining:
。このデモは、私が遭遇した 2 つの問題を示しています。使用される正規表現は次のとおりです。(?:\bSECOND\sLEVEL(\n\s+.*)*Dining:)(.*\b)
- を含む最後の行を削除するまで、 「壊滅的なバックトラッキング」エラーが表示されます
Laundry: 1
。これは、マッチ数が多すぎることが原因ですか? - その行を削除すると、正規表現は .. の下の最後の一致のみをキャプチャし、 の下
OTHER LEVEL
の一致ではなく '2' を返しますSECOND LEVEL
。
Dining:
下に存在しない場合があるSECOND LEVEL
ため、何も返されません。
SECOND LEVEL
の番号のみをキャプチャし、Dining:
存在しない場合は何も返さない正規表現は何ですか? ストレートアップの正規表現が推奨され、可能であれば Java でのループはありません。ありがとう