サーチ…


構文

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

備考

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

さらに、多くの正規表現エンジンは、lookbehinds内のパターンを固定長文字列に制限します。たとえば、パターン(?<=a+)bはaaabのbと一致する必要がありますが、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