[email protected]:~$ echo "348dfgeccvdf" | grep -oP "\d+(?=\w{6,10})"
348
[email protected]:~$ echo "348dfgeccvdf" | grep -oP "(?=\w{6,10})\d+"
348
\d+(?=\w{6,10})
の場合、これは標準的な正の先読み式です。 Wiktor第Stribiżewとして
は、負の後読みの構文は(?<! and ends with the unescaped)
で始まるポスト
position and negative lookbehind
で言います。パターンの開始、途中、または終わりのいずれに表示されても、それはネガティブなルックバックではありません。
位置と完全な先読み(lookbehind)の表現の間には関係がないかもしれません。このようWiktor第Stribiżewと同じロジックに従って、先にポジティブな外観のために推測すること同じ構造式 `(?= w {6,10}} d +と(?= abc)ad`を説明する方法は?
は否定後読みのために言う:
"\d+(?=\w{6,10})" == "(?=\w{6,10})\d+"
は、それらの両方が先行し、正見ています。今ここに
は別の例である:
echo "adabc adabb" |grep -oP "ad(?=abc)"
ad
echo "adabc adabb" |grep -oP "(?=abc)ad"
"ad(?=abc)"
が"(?=abc)ad"
と等しくないのはなぜ?
同じ構造式を説明する方法(?=\w{6,10})\d+ and (?=abc)ad
?
[ゼロ長のアサーション](http://www.regular-expressions.info/lookaround.html)は、文字/開始点/終了点の特定の位置で「起動」されます。この位置では、定義された状態のために前方または後方を「見る」。 –
Wiktorsサンプルでは、単語境界( '\ b')と負のルックバックの位置を変更しています。これは両方ともゼロ幅アサーションであるため可能です。あなたのサンプルでは、先読みと一致するパターンを交換します。これは、基本的な異なる全体パターンにつながります。 –
あなたは彼のことを誤解しているように見えます_それはパターンの始め、途中、または終わりに現れます_。これは、一致する進捗状況がルックアラウンドの位置とは独立して同じであることを示しているわけではありません。 –