サーチ…


構文

  • ポジティブな先読み: (?=pattern)
  • 否定先読み:( (?!pattern)
  • 正のlookbehind(?<=pattern)
  • 負のlookbehind(?<!pattern)

備考

すべてのregexエンジンでサポートされていません。

さらに、多くの正規表現エンジンは、lookbehinds内のパターンを固定長文字列に制限します。たとえば、パターン(?<=a+)baaabbと一致する必要がありますが、Pythonではエラーが発生します。

キャプチャグループは、後方参照を含めて、許可され、期待どおりに動作します。先読み/見かけのヒント自体は、キャプチャグループではありません。

基本

肯定先読み (?=123)は、一致にパターンを含めることなく、テキストに指定されたパターンが続くことを示します。同様に、 正のlookbehind (?<=123)は、指定されたパターンの前にテキストがあると主張します。 =!置き換えて!アサーションを否定します。


入力123456

  • 123(?=456) 123正の先読み )と一致し123(?=456)
  • (?<=123)456一致456ポジティブなルックバック
  • 123(?!456)が失敗( 否定先読み
  • (?<!123)456が失敗します( 負のlookbehind

入力456

  • 123(?=456)が失敗する
  • (?<=123)456が失敗する
  • 123(?!456)が失敗する
  • (?<!123)456一致456

lookbehindを使用してエンディングをテストする

Lookbehindは、パターンの終わりに使用して、パターンが終了するかどうかを特定の方法で確認できます。

([az ]+|[AZ ]+)(?<! )は、末尾の空白を排除して小文字または大文字のみのシーケンスにマッチします。

\ Kで可変長の見掛け目をシミュレートする

いくつかの正規表現フレーバー(Perl、PCRE、Oniguruma、Boost)は固定長ルックビヘイドのみをサポートしていますが、パターンの先頭で可変長ルックビハインドをシミュレートするために使用できる\K機能を提供しています。 \Kに遭遇すると、この点までの一致するテキストは破棄され、 \K 続くパターンの部分に一致するテキストのみが最終結果に保持されます。

ab+\Kc

それと同等です:

(?<=ab+)c

一般に、次の形式のパターン:

(subpattern A)\K(subpattern B)

次のようになります。

(?<=subpattern A)(subpattern B)

BサブパターンがAサブパターンと同じテキストにマッチする場合を除いて、本当のルックバックとは異なり、Aサブパターンがテキストを消費するので、微妙に異なる結果に終わることがあります。



Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow