問題タブ [non-greedy]
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.
c# - C# 正規表現での貪欲、非貪欲、すべて貪欲なマッチング
次の例ですべての一致を取得するにはどうすればよいですか。
PS:すべての一致を一般的な方法で行いたいです。上記の例はほんの一例です。
php - PHP preg_replaceは、**xyz**をxyzに変換します
楽しみのために、マークダウンに似たものを作ることにしました。過去の正規表現の小さな経験で、それらがどれほど強力であるかを知っているので、それらは私が必要とするものになるでしょう。
したがって、この文字列がある場合:
preg_replaceを使用してそれを次のように変換するにはどうすればよいですか?
私はこのようなものを想定していますか?
java - ANTLR で greedy=false オプションを使用して一致する属性としてテキストのブロックにアクセスするにはどうすればよいですか?
ANTLR 文法には次のようなルールがあります。
このルールは単純に C スタイルのコメントに一致するため、/* と */ の間にある任意のテキストを含む任意のペアを受け入れ、正常に機能します。
ここでやりたいことは、ルールが一致したときに /* と */ の間のすべてのテキストをキャプチャして、アクションにアクセスできるようにすることです。このようなもの:
このアプローチは機能しません。解析中に「/*」の後の最初の文字に到達すると、「実行可能な代替手段はありません」となります。
これを行うことができるかどうか、またはどのように行うことができるかについては、よくわかりません。提案やガイダンスを歓迎します。
regex - Sed 非貪欲一致: 最初の xml ノードの一致
この質問のフォローアップ
このコマンドは、変数として渡された指定された名前を持つすべての xml ノードを検索するために実行されます。ここでの唯一の問題は、一致が最初のノードを超えて</item>
次のノードに、最終的に最後の</item>
.
これを貪欲にしないにはどうすればよいですか?
python - Pythonで正規表現を脱欲化する
ファイル拡張子を除いた特定のファイルタイプのフルパスファイル名を短いファイル名に変換する正規表現を作成しようとしています。
たとえば、次の文字列から.barファイルの名前だけを取得しようとしています。
Python re docsによると、*?
は貪欲でないバージョンな*
ので、
のために戻ったmatch.group(1)
が、代わりに私は得た
私はここで貪欲について何が欠けていますか?
python - 最小限の (貪欲ではない) 一致が文字列の末尾文字 '$' の影響を受けるのはなぜですか?
編集:補助的な回答を引き起こしたため、元の例を削除してください。タイトルも修正。
問題は、正規表現に「$」が存在すると、式の貪欲さに影響する理由です。
より簡単な例を次に示します。
「?」何もしていないようです。ただし、「$」が削除されると、「?」が削除されることに注意してください。尊重されます:
編集: 言い換えれば、「a+?$」は最後の a だけでなく、すべての a に一致します。これは私が期待したものではありません。正規表現「+?」の説明は次のとおりです。python docsから:「追加 '?' 修飾子が非貪欲または最小限の方法で一致を実行するようにした後、可能な限り少ない文字が一致します。」
これは、この例では当てはまらないようです: 文字列 "a" は正規表現 "a+?$" と一致するため、文字列 "baaaaaaa" の同じ正規表現の一致が単一の a (右端の1)?
regex - Perlの欲張りでない
欲張りでない正規表現(regex)に問題があります。欲張りでない正規表現に関する質問があるのを見てきましたが、それらは私の問題に答えません。
問題:「lol」アンカーのhrefを一致させようとしています。
注:これはPerl HTML解析モジュールで実行できることを知っています。私の質問は、PerlでのHTMLの解析に関するものではありません。私の質問は正規表現自体についてであり、HTMLは単なる例です。
テストケース:との4つのテストが.*?
あり[^"]
ます。2つは、最初に期待される結果を生成します。しかし、3番目はそうではなく、4番目はちょうどそうですが、理由はわかりません。
.*?
との両方のテストで3番目のテストが失敗するのはなぜ[^"]
ですか?貪欲でないオペレーターは機能すべきではありませんか?.*?
との両方のテストで4番目のテストが機能するのはなぜ[^"]
ですか?前に含めると正規表現が変わる理由がわかりません.*
(3番目と4番目のテストは前を除いて同じ.*
です)。
私はおそらく、これらの正規表現がどのように機能するかを正確に理解していません。Perlクックブックのレシピは何かについて言及していますが、それが私の質問に答えるとは思いません。
regex - 非貪欲な (消極的な) 量指定子を含む正規表現は、貪欲なものだけを使用するように書き換えることができますか?
リテラル、正と負の文字クラス、順序付けられた代替、貪欲な量指定子?
、*
、 をサポートする正規表現言語があるとし+
ます。(これは基本的に、後方参照、ルックアラウンド アサーション、または他のいくつかの凝ったビットのない PCRE のサブセットです。) 非貪欲な量指定子??
、*?
、およびを追加すると+?
、この形式主義の表現力が向上しますか?
別の言い方をすれば、貪欲でない量指定子を含むパターン S が与えられた場合、そのパターンを、貪欲でない量指定子を含まない同等のパターン T に書き換えることができますか?
この質問が文献で検討されている場合は、誰でも提供できる参考文献をいただければ幸いです。拡張正規表現形式の表現力に関する理論的な研究はほとんど見つけることができませんでした (後方参照がどのように通常の言語から文脈自由文法に移行するかについての通常の事柄を超えて)。
regex - 末尾のゼロを削除するための sed - 正規表現 - 非貪欲
以下のような数行のファイルがあります
さて、sed
これを適用した後、出力を次のようにしたいと思います(さらに処理するために使用するため)
つまり、すべての末尾のゼロ ( の前のもの|
) を結果から削除したいと考えています。
私は次のことを試しました:(regtestは上記の元のデータを含むファイルです)
貪欲だと思うのでうまくいきませんでした。
動作します。ただし、このsed
コマンドを同じファイルに繰り返し適用して、ゼロを次々と削除する必要があります。意味を成さない。
どうすればそれについて行くことができますか?ありがとう!
regex - 正規表現マッチングチュートリアル
私は何年も正規表現を使用していて、いくつかのチュートリアルとリファレンスを読みました(emacs正規表現リファレンスは私の聖書です)が、マッチングを理解するのにまだ問題があります。豊富な例との正規表現のマッチングに関する優れた包括的なチュートリアルはありますか?誰かが私に正規表現のマッチングを最終的に深く理解できるリンクを教えてもらえますか?
私を悩ませている問題の例。
結果は次のとおりです。
さて、それは正確には何ですか?貪欲または非貪欲(C#Regexp.Matchesです)?
なぜ、oなぜ(貪欲でない)結果がそうではないのか:
({}の最初の可能なペアに一致)
または(貪欲):
({}の可能な最大のペアを作成する)
もちろん、実際の結果はまさに私が必要としているものであり、正規表現が私の心を読んでくれてとてもうれしいですが、私は彼の心を読んでもらいたいです:-Dだから、誰かが正規表現のマッチングに関するまともなチュートリアルを持っていますか?この試合がどのように行われたかを理解するのを手伝ってください。