[解決済み] 正規表現ネガティブルックアヘッド
質問
私のホームディレクトリには、Drupalプラットフォームを含むフォルダdrupal-6.14があります。
このディレクトリから、次のコマンドを使います。
find drupal-6.14 -type f -iname '*' | grep -P 'drupal-6.14/(?!sites(?!/all|/default)).*' | xargs tar -czf drupal-6.14.tar.gz
このコマンドが行うのは、フォルダをgzip圧縮することです。 drupal-6.14 のすべてのサブフォルダを除いたものです。 drupal-6.14/sites/ sites/all と sites/default を除く が含まれています。
正規表現について質問です。
grep -P 'drupal-6.14/(?!sites(?!/all|/default)).*'
式は 動作 を使うと、除外したいフォルダをすべて除外することができますが、その理由がよくわかりません。
正規表現を使った一般的な作業である
以下の文字列を除くすべての文字列にマッチします。 しない はサブパターンxを含む。言い換えれば、サブパターンを否定する。
このような問題を解決する一般的な戦略として、負のlookaheadsを使用することは理解している(と思う)のですが、正と負のlook(ahead/behind)の仕組みを納得できるレベルで理解したことがないのです。
長年にわたり、それらに関する多くのウェブサイトを読んできました。PHPやPythonの正規表現マニュアル、その他、以下のようなページです。 http://www.regular-expressions.info/lookaround.html などがありますが、私は一度も 本当に をしっかりと理解することができました。
どなたか、これがどのように機能しているのか、また、同様のことを行う類似の例を示していただけませんか?
-- Update One:
Andomarの回答について:二重の負のルックアヘッドは、単一の正のルックアヘッド文としてより簡潔に表現することができます。
すなわち
'drupal-6.14/(?!sites(?!/all|/default)).*'
に相当する。
'drupal-6.14/(?=sites(?:/all|/default)).*'
???
-- アップデート第2弾。
ランダムとアラン・ムーアのように、二重の負のルックヘッドを正のルックヘッドと交換することはできません。
解決方法は?
負のルックヘッドとは、この位置で、以下の正規表現がマッチしないことを意味します。
簡単な例で説明しましょう。
a(?!b(?!c))
a Match: (?!b) succeeds
ac Match: (?!b) succeeds
ab No match: (?!b(?!c)) fails
abe No match: (?!b(?!c)) fails
abc Match: (?!b(?!c)) succeeds
最後の例は
二重否定
を許可しています。
b
に続いて
c
. ネストされた負のルックヘッドが正のルックヘッドになります。
c
が存在するはずです。
各例では
a
がマッチングされます。 lookaheadはあくまで条件であり、マッチしたテキストに追加されることはない。
関連
-
[解決済み] 最初のマッチで停止する正規表現
-
[解決済み] 正規表現で変数を使うには?
-
[解決済み] 正規表現の末尾にある中括弧内のカンマ区切りの数字は何を意味するのですか?
-
[解決済み] 正規表現のメタ文字の違いについて
-
[解決済み] regex オプションのワードマッチ
-
[解決済み] 単語を含まない行にマッチする正規表現
-
[解決済み] 正規表現における非捕捉グループとは何ですか?
-
[解決済み] JavaScriptの正規表現でマッチしたグループにアクセスするにはどうすればよいですか?
-
[解決済み] grepによるネガティブマッチング(fooを含まない行にマッチする)
-
[解決済み] 有効な正規表現を検出するための正規表現はありますか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】正規表現でのコロン記号の使用について
-
[解決済み】正規表現における括弧のエスケープについて
-
[解決済み] 正規表現でのコロン記号の使用
-
[解決済み] Regex:最初に出現する文字までのマッチング
-
[解決済み] ColdFusion を使用して XML 文字列から余分なホワイトスペースをすべて削除するにはどうすればよいですか?
-
[解決済み] Kibanaクエリの完全一致
-
[解決済み] 正規表現の末尾にある中括弧内のカンマ区切りの数字は何を意味するのですか?
-
[解決済み] 正規表現によるIPv4アドレスの検証
-
[解決済み] Regexの複数マッチの部分文字列
-
[解決済み] regex オプションのワードマッチ