問題タブ [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.

0 投票する
2 に答える
1098 参照

c++ - 正規表現を使用して引用符付きおよび引用符なしの値を抽出する

<tag>=<value>正規表現を使用して型の文字列を解析しようとしていますが、引用符で囲まれた値のサポートを追加する際に問題が発生しました。アイデアは、引用符で囲まれていない値は、先頭/末尾の空白を削除して、次のようにする必要があるということです[ Hello ]( [Hello]Pls は角括弧を無視します)。

[ " Hello World " ]ただし、値が引用符で囲まれている場合、二重引用符までは削除したいのですが、それ以上は削除しないでください。[" Hello World "]

これまでのところ、これに対応するパターン マッチを含む次のコードを思いつきました (一部の文字は、トライグラフやその他の C 形式の文字として解釈されるのを避けるために、エスケープまたは二重エスケープされていることに注意してください)。

二重エスケープを取り除くと、これは次のように分解されます。

  • ^- 行頭。
  • \s*- オプションの空白の量。
  • ([a-zA-Z0-9_-]+)- 1 つ以上の英数字、またはダッシュまたはアンダースコア。これがタグとしてキャプチャされます。
  • \s*- オプションの空白の量。
  • =- 「等しい」記号。
  • \s*- オプションの空白の量。
  • "??- オプションの二重引用符 (貪欲ではない)。
  • ([%:\a-zA-Z0-9 /\._]+?)- 1 つ以上の英数字またはスペース、アンダースコア、パーセント、コロン、ピリオド、スラッシュ、バック スラッシュ。これは値としてキャプチャされます (欲張りではない)。
  • "??- オプションの二重引用符 (貪欲ではない)。
  • \s*- オプションの空白の量。
  • $- 行末

の呼び出し例ではmain()、次のようになると予想されます。

しかし、私が実際に得るものは次のとおりです。

したがって、ほぼ正しいですが、正規表現の値セクションをその外側の引用符で具体的に囲んでいるにもかかわらず、何らかの理由で最初の引用符が出力値にぶら下がっています。

0 投票する
3 に答える
128 参照

regex - 「?」を使用した遅延正規表現の背後にあるロジック?

ここに私の質問があります:

たとえば、パターンが次の場合:

abc?

次に、これは一致します: ab abc but not abd as c? 意味: ac がある場合は一致する、そうでない場合は心配ありません..

たとえば、次のようなものがあるとします。

->sometext<-->somemoretext<-

次のようなパターンがある場合: (これは貪欲です) ->.*<-のみに一致します:

->sometext<-->sometext<-

ただし、パターンが遅延している場合: ->.*?<-一致します: ->sometext< - AND ->sometext<- ...

もしも、 ?wter/not (最初の例のように) のようなものを意味し、2 番目の例の背後にあるロジックは何ですか? 誰か説明できますか? パターンが .* の場合、なぜ ->sometext-< で止まるのですか?

0 投票する
2 に答える
297 参照

regex - 正規表現を使用してファイル内のチャンクを排除する (iCal ファイル内の分類されたイベント)

イベントのカテゴリに応じて個々の新しい .ics ファイルを作成したい .ics ファイルが 1 つあります (egroupware で 1 つのカテゴリのイベントのみをエクスポートすることはできません。カテゴリに応じて新しいカレンダーを作成したいと考えています)。私の意図したアプローチは、1 つのカテゴリ以外のすべてのイベントを繰り返し削除してから、EditPad Lite 7 (Windows) を使用してファイルを保存することです。

私は正規表現を正しくするのに苦労しています。.+? それでも貪欲すぎて、文字列を否定する (たとえば、1 つのカテゴリからイベント以外をすべて削除する)こともできません。

サンプル

正規表現BEGIN:VEVENT.+?CATEGORIES:Sports.+?END:VEVENTはスポーツ イベントのみに一致する必要がありますが、カテゴリBEGINの最初から最初まですべてをキャッチENDします。

編集: 否定も機能しません: BEGIN:VEVENT.+?((?!CATEGORIES:Sports).).+?END:VEVENT.

私は何が欠けていますか?どんな指針も高く評価されます。

0 投票する
3 に答える
164 参照

python - Pythonでのほとんどの貪欲でない正規表現の一致(または単に一般的な正規表現)

正規表現が一致しすぎるという問題があります。できるだけ貪欲にならないように心がけました。私のREは:

意味

「ホストの定義」の後にスペースまたはタブが続き、その後に「{」が続きます。任意の数のスペースまたはタブの後に「host_name」が続き、その後に任意の数のスペースまたはタブが続き、その後に「HOST_B」が続くまでの任意のテキストおよび改行。スペースまたはタブの後に「}」が続くまでのテキストと改行

私のテキストは

一致は、最初の定義からhost_bの終了ブラケットに向かっています。host_cのグループを取得していません(host_cを取得するべきではありません)が、ホストbのグループのみを取得し、全体を取得することはできません。

何か助けはありますか?私の正規表現はさびています。http://regexpal.com/でテストできます

0 投票する
4 に答える
7442 参照

php - 貪欲でない正規表現

このようなコメントphpファイルのいくつかのタグ内の値を取得する必要があります

ご覧のとおり、ファイルには次のようなタグの改行と繰り返しがあり、すべてのタグ<funcion></funcion>を取得する必要があるため、次のようなことを試みていました。

この例は改行で動作しますが、貪欲なので、これらの2つの解決策を検索して見ました:

しかし、どれも私にはうまくいきません。理由はわかりません

0 投票する
4 に答える
6673 参照

regex - 貪欲でない正規表現を逆方向に作成して、順方向と同じように動作させます

このパターン:

次の文字列に対して:

一致:

欲張りでないものは、後方/左方向(すべてを取る)と前方/右方向(1つだけを取る)で異なる動作をすることがわかります。

すべてに一致する最初の欲張りでaないものを、できるだけ一致しないようにする方法はありますか?最後の部分と同じように動作するようにb

0 投票する
2 に答える
97 参照

c# - 正規表現の後読みを使用して最初の一致のみを返す

次の XML ドキュメントがあるとします。

正規表現を使用して最初のものを返すにはどうすればよい/>ですか? これまでのところ、次の式を使用してかなり近づくことができました。

ただし、これは/>の最初の出現に続く のすべてのインスタンスに一致します<myGoodSection。また、式を貪欲にしないようにするために、否定的な後読みと組み合わせてみましたが、効果がないようです。

編集:

正規表現の置換を処理するために、C# の上に構築されたツールを使用しています。System.Text.RegularExpressions直接使用していた場合のように、使用できるマッチの数と使用できないマッチの数を制御することはできません。私が使用しているエンジンがサポートする機能を明確にするために、ここで C# を参照します。

はい、一般的な慣行として、XML の解析に RegEx を使用すべきではないことは承知しています。私の現在の範囲、要件、および制約を考慮して、それが完全に受け入れられるソリューションであると規定しましょう (実際にそれを達成する方法がある場合)。

0 投票する
1 に答える
169 参照

php - 非貪欲な正規表現
タグphp

以下の html から part#1AMTB00186 の各インスタンスの特定の修飾子を取得しようとしています。戻る必要が4cyl 2.3L - F23A1, Balance Shaftあり4cyl 2.3L - F23A1, CAMます。私の正規表現は貪欲だと思いますが、貪欲でないようにする方法がわかりません。の最初の修飾子が常に表示されます2.3L L4, Engine-F23A1。私は使っている:

ありがとうございました