0

次の例では、@@BOKeyword-との間の最も内側のコンテンツを一致させようとしています。-End@@

@@BOKeyword-Here is@@BOKeyword-I want to match this!-End@@stuff-End@@

したがって、私の一致は次のようになります。I want to match this!次の正規表現を使用しています。@@BOKeyword-([^@@BOKeyword--End@@]*)-End@@

しかし、これはまったく一致しません。以前の質問の回答から導き出したこの例に基づいてこれを開発しました:

AC I want to match this! BD I don't want to match this! AC I want to match this! BD I don't want to match this! BD

正規表現の使用:AC([^ACBD]*)BD

そして、これは期待どおりに機能します。これがどのように機能するかを誤解していると思います。ヒントをいただければ幸いです。ありがとう!

注:これをJavaで実行しています。

4

1 に答える 1

1

正規表現エンジンがサポートlookaroundしている場合は、これを試すことができます:

(?<=@@BOKeyword-).((?<!@@BOKeyword-).(?!-End@@))*.(?=-End@@)
  • 最初にDOT一致する開始文字:I
  • 真ん中DOTは、区切り文字で囲まれていない文字に一致します。·want·to·match·this
  • 最後にDOT一致する終了文字:!

カバーされないケースが 2 つあります (その間に 1 文字または 0 文字のみ):

(?<=@@BOKeyword-).?(?=-End@@)

これら 2 つの正規表現を組み合わせるのは非常に困難です。別の方法は次のとおりです。

  • {区切り文字を/ }(または他の単一文字ペア)に置き換えます
  • 一致するより単純な正規表現を書く
于 2012-11-06T23:49:47.430 に答える