問題タブ [regex-lookarounds]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
asp.net - 正規表現の否定先読み
MaxLength プロパティが定義されていないコントロールを VS プロジェクトで検索する必要がある状況があります。
例えば:
MaxLength が定義されていないコントロールを見つける正規表現パターンの提案はありますか?
これでの私の最初の試みはうまくいくようですが、せいぜい不完全なようです...
より良い解決策を見てみたいです。
注: Visual Studio の検索は、上記のパターンでチョークします。このパターンを使って実際に検索するには、別のアプリケーションを使用せざるを得ませんでした
java - 先読みを使用した Java 正規表現
javaで正規表現パターンの先読み部分を出力する方法はありますか?
このスニペットは出力します:
こんにちは
世界
これ
です
私がやりたいのは、単語をペアとして出力することです:
Hello world
world これ
は
例です
どうやってやるの?
python - ネガティブな先読み正規表現の貪欲(なぜ。*?貪欲すぎるのか)
ネガティブな先読み正規表現の詳細を理解するのに苦労しています。正規表現の先読み、後読み、およびアトミックグループを読んだ後、この説明を見つけたとき、私は否定的な先読みの良い要約を持っていると思いました。
(?!REGEX_1)REGEX_2
一致しない場合にのみ
REGEX_1
一致します。チェック後、同じ位置からREGEX_1
検索を開始します。REGEX_2
アルゴリズムを理解したいと思って、2文のテスト侮辱を作り上げました。ある単語のない文章を見つけたかったのです。具体的には...
侮辱: 'ヨママは醜いです。そして、彼女は濡れた犬のようなにおいがします。」
要件:
- テスト1:「醜い」なしで文を返します。
- テスト2:「looks」なしで文を返します。
- テスト3:「におい」のない文を返します。
テストワードをに割り当て、$arg
以前(?:(?![A-Z].*?$arg.*?\.))([A-Z].*?\.)
はテストを実装していました。
(?![A-Z].*?$arg.*?\.)
テストワードを含む文を拒否するための否定的な先読みです([A-Z].*?\.)
少なくとも1つの文に一致します。
重要な部分は、ネガティブ先読みを処理した後、正規表現エンジンがどこでマッチングを開始するかを理解することにあるようです。
期待される結果:
- テスト1($ arg = "醜い"):「そして、彼女は濡れた犬のようなにおいがします。」
- テスト2($ arg = "looks"):"Yomamaは醜いです。"
- テスト3($ arg = "smells"):"Yomamaは醜いです。"
実際の結果:
- テスト1($ arg = "醜い"):「そして、彼女は濡れた犬のようなにおいがします。」(成功)
- テスト2($ arg = "looks"):"Yomamaは醜いです。" (成功)
- テスト3($ arg = "smells"):失敗、一致なし
([A-Z].*?\.)
最初は、貪欲すぎて両方の文に一致したため、テスト3は失敗したと思いました。しかし、(?:(?![A-Z].*?$arg.*?\.))([A-Z][^\.]*?\.)
どちらも機能しませんでした。次に、Pythonのネガティブ先読みの実装に問題があるかどうか疑問に思いましたが、perlではまったく同じ結果が得られました。
最後に解決策を見つけました。;を使用して、式の自分の.*?
部分のピリオドを拒否する必要がありました。[^\.]*?
したがって、この正規表現は機能します。(?:(?![A-Z][^\.]*?$arg[^\.]*?\.))([A-Z][^\.]*?\.)
質問
しかし、私には別の懸念があります。「ヨママは醜いです。」「におい」はありません。それで、.*?
欲張りでない一致であると思われる場合、なぜ私はテスト3をで完了できないの(?:(?![A-Z].*?$arg.*?\.))([A-Z].*?\.)
ですか?
編集
@bvrの優れた使用提案に照らして-Mre=debug
、これについては作業後にもう少し検討します。確かに、この時点でセスの説明は正確であるように見えます。.*?
これまでに学んだことは、NLAに欲張りでない演算子を入れても、可能な限り負の先読み式が一致するということです。
Pythonの実装
Perlの実装
出力
javascript - javascriptの正規表現先読みに関する問題
スペースで区切られたすべての単語が3単語文字より長い場合にのみ一致させようとしています(3単語文字は必須です。abc*は正しいですが、ab *は正しくありません)。これは私のテストです:
すべてのテキストが一致しますが、一致するものはないと思います。多分私は先読みがどのように機能するかについていくつかの基本を誤解しています。
regex - 先読みでグループ化して参照する方法
この例では:
、これは regex によって一致し^(?!.*(Chapter|Part)).*\n\("Chapter.*\n
ます。2 つのグループ("Talking with Bengt Holmstrom 1" "#44")
とが必要("Chapter 1 What is Economics? 3" "#46")
です。
グループ化するには、上記の正規表現を に変更します^((?!.*(Chapter|Part)).*)\n(\("Chapter.*)\n
。2 つのグループを参照したいのですが、 のようにとを参照として使用する\1
とうまくいきません。何かおかしいのかな?と思いました。\2
\1\2
ところで、私は gedit regex プラグインを使用しています。
ありがとう!
perl - 正規表現の先読みおよび/または後読みが間違っている
$line = 'ボブは空想がすべて良いとは決して言いませんでした';
探している: 「ever」という単語のみを一致させてキャプチャします。先読みおよび/または後読みアサーションを使用してこれを行います。
置換: 任意のメカニズムを使用して、「ever」という単語とその後のスペースを行から削除します。
Extra-Credit: 任意のメカニズムを使用して、'ever' という単語の文字列への文字オフセットを取得します。
私は試験を書きました。しかし、私は通り抜けていません。これらの回答で何が間違っていますか?
javascript - 負の先読み正規表現
「foo.htm」で終わる場合を除いて、「。htm」で終わるすべての文字列を一致させたい。私は一般的に正規表現でまともですが、否定的な先読みは私を困惑させます。なぜこれが機能しないのですか?
代わりに何を使うべきですか?「ネガティブルックビハインド」式が必要だと思います(JavaScriptがそのようなことをサポートしている場合、それはサポートされていません)。
python - 先読みアサーション
Python で正規表現を使用して、有効なドメイン名内のラベルを照合しようとしています。
ラベルの先頭または末尾のハイフンを避けるために、肯定的および否定的なアサーションを使用しようとしています。
ただし、文字列 "-asdf" は引き続き一致します: e.match(DOMAIN_LABEL_RE, "-asdf", re.VERBOSE).group()
なぜまだ一致しているのかわかりません。
助けてくれてありがとう。
M.
python - 先読みと非キャプチャ正規表現
メールアドレスの@文字の前のローカル部分を次のように一致させようとしています:
テスト:
与えます:
@
非キャプチャ グループを使用しているのに、出力にが表示されるのはなぜ(?:@)
ですか?
テスト:
与えます:
正規表現がドットのペアを含む文字列を拒否しないのはなぜ'..'
ですか?
java - パターン先読み
しかし、文字列「mad」が2番目のグループに含まれる必要があります。