問題タブ [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.
regex - 正規表現 nongreedy は貪欲です
私は次のテキストを持っています
私が読んでいるこの本によると、?
任意の量指定子の後に続くと、貪欲ではなくなります。
私の正規表現to*?n
はまだ返されてtooooooooooooon
います。
返すton
べきじゃないですか。
理由はありますか?
javascript - 正規表現にJavaScriptで貪欲でないマッチングを使用する方法はありますか?
JavaScriptで貪欲でないマッチングを使用する方法があるのだろうか?U modiferを試しましたが、機能しないようです。
JavaScriptで小さなBBCodeパーサーを書きたいのですが、貪欲なマッチングがなければ、(少なくとも私が見る限りでは)次のようなことはできません。
ただし、HTMLの有効性を確認する必要がないため、このような置換は便利です。閉じられていないマークアップは単純なテキストのままになります。
regex - 正規表現: Lazy の方が悪いですか?
私はいつもこのような正規表現を書いてきました
しかし、私はこの怠惰なことについて学び、このように書くことができることを知りました
この2番目のアプローチを使用することに不利な点はありますか? 正規表現は間違いなくよりコンパクトです(SOでもより適切に解析されます)。
編集:ここには2つの最良の答えがあり、式の2つの重要な違いを指摘しています。ysthの答えは、貪欲でない/怠惰なものの弱点を指摘しており、ハイパーリンク自体にAタグの他の属性が含まれる可能性があります(間違いなく良くありません)。Rob Kennedy は貪欲な例の弱点を指摘しています。アンカー テキストには他のタグを含めることはできません (すべてのアンカー テキストを取得するわけではないため、間違いなく問題ありません)。同じように見える遅延ソリューションと非遅延ソリューションは、おそらく意味的に同等ではありません。
編集:3番目に良い答えは、式の相対速度に関するAlan Mによるものです。当分の間、私は彼をベストアンサーとしてマークし、人々が彼により多くのポイントを与えるようにします:)
linux - 複数行の検索を行い、スクリプトで置換する方法は?
Pythonソースファイル内のすべての複数行インポートを置き換えようとしています..したがって、ソースは次のようになります
そして、私は次のようなものを手に入れたいです
sed を使用しようとしましたが、閉じ括弧の非貪欲な一致をサポートしていないように見えるため、2 番目のインポートを「食べます」.. :(
ヒントはありますか?これは sed では不可能ですか?別のツールで試す必要があります?
php - HTML コメント タグのコンテンツを検索して置換するための正規表現
HTML コメントに基づく構文を使用して、ユーザーが簡単に記述できないフラッシュ ビデオ プレーヤー、スライドショー、およびその他の「ハード」コードをユーザーが挿入できるようにする CMS があります。
1 つの FLV ムービーの構文は次のようになります。
<!--PLAYER=filename.flv-->
私はこのコードを使用します:
$find_players = preg_match("/<!--PLAYER\=(.*)-->/si", $html_content, $match);
$match[1] にはファイル名が含まれています (これだけで十分です)。
正規表現に関する私の知識は失われつつあるため、これを調整して複数の一致を取得することはできません。
ページにもっとある場合は、あまりにも貪欲に (最初<!--PLAYER
から最後まで) 一致するため、完全に壊れます。-->
php - php非欲張り正規表現の問題
デモ:
この小さなプログラムに出力させたいのは「bcs>Hello」ですが、実際には「bcs」だけです。
私のパターンの何が問題になっていますか?
algorithm - 貪欲なアルゴリズムを超える効率的な方法は何ですか
この質問のドメインは、制約のあるハードウェアでの操作のスケジューリングです。結果の分解能は、スケジュールが収まるクロック サイクル数です。初期の決定が将来の決定を制限し、可能なスケジュールの総数が急速かつ指数関数的に増加する場合、検索スペースは非常に急速に拡大します。2 つの命令の順序を交換するだけで、通常は同じタイミング制約が発生するため、可能なスケジュールの多くは同等です。
基本的に問題は、膨大な検索空間をあまり時間をかけずに探索するための優れた戦略とは何かということです。ごく一部のみを検索することを期待していますが、その間に検索スペースのさまざまな部分を探索したいと考えています。
現在の貪欲なアルゴリズムは、早い段階で愚かな決定を下す傾向があり、分岐と境界の試みは非常に遅いものでした。
編集:分岐限定を使用して7サイクルのみを使用するソリューションが存在する一方で、貪欲なアルゴリズムが8サイクルを使用して終了する可能性があるため、結果は非常にバイナリであることを指摘したいと思います。
2 つ目のポイントは、命令間のデータ ルーティングと命令間の依存関係に重大な制限があり、ソリューション間の共通性の量が制限されていることです。これは、多数の順序付け制約を伴うナップザックの問題であり、ルーティングの輻輳が原因で一部のソリューションが完全に失敗したものと見なすことができます。
明確化: 各サイクルでは、各タイプの操作の数に制限があり、一部の操作には 2 つの可能なタイプがあります。かなりタイトまたはかなり寛容になるように変更できる一連のルーティング制約があり、制限はルーティングの輻輳によって異なります。
regex - 複数の後読みマッチを非貪欲にする方法
RegEx2 の望ましい結果は単なる <content2> ですが、明らかに貪欲です。RegEx2 を非貪欲にし、最後に一致した後読みのみを使用するにはどうすればよいですか?
[これを NoteTab 構文から正しく翻訳したことを願っています。正規表現コーディングはあまりしません。<prefix>、<content>、および <suffix> という用語は、任意の文字列を表すことを意図しています。「?<=」後読みコマンドの「<」のみが重要です。]
簡単なことだと思いますが、何時間も検索した後、自分で解決することをあきらめています。
助けてくれてありがとう
美術
java - Java 正規表現: UNGREEDY フラグ
汎用のテキスト処理ツールであるTexyを移植したいと思います。、PHPからJavaへ。
このツールは、 を使用して、どこでも貪欲でないマッチングを行いpreg_match_all("/.../U")
ます。だから私はいくつかのUNGREEDY
フラグを持つライブラリを探しています。
構文を使用できることはわかっ.*?
ていますが、実際には多くの正規表現を上書きして、更新されたバージョンごとに確認する必要があります。
確認しました
- ORO - 放棄されたようです
- ジャカルタ正規表現 - サポートなし
- java.util.regex - サポートなし
そのようなライブラリはありますか?
ありがとう、オンドラ
regex - 私の非貪欲な Perl 正規表現がまだあまりにも多く一致するのはなぜですか?
たとえば、次の文字列を含む行があるとします。
そして抽出したい
次のコードがあります。
しかし、それは私が必要とする以上のものを私に与えてくれます:
非キャプチャ括弧を使用して、パターン全体をグループ化してみました。
しかし、問題は解決しません。
Learning Perl の Nongreedy Quantifiers セクションを読み直しましたが、今のところ何もわかりません。
寛大に提供できるガイダンスをありがとう:)