問題タブ [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 - 繰り返される完全な文字列を見つけるための RegExp (2 レベルの欲張り)
(おそらく複雑な) RegExp の質問があります。モデルからファイルを生成するツールで、モデルが名前を 2 回使用していると表示されますが、これがどの名前であるかは表示されません。問題の名前はすべて「CK_」で始まり、その後に空白以外が続くことを知っています。このテストファイルを準備しました:
ご覧のとおり、「CK_123abc」が 2 回表示されています。RegExp を使用して、それらすべて (さらにある場合) をキャッチしたいと考えています。これまでに取得したもの: (CK_\S*).+\1
これは正常に機能し、次のテキストと一致します。
しかし、それも一致します
2 番目の不要な一致はCK_1です。私の実際のドキュメントはこれらの「半文字列」一致でいっぱいであるため、データ内で実際の一致 (ここの最初のものなど) を見つけることができません。(CK_\S*)は何らかの理由で貪欲ではない、または正規表現全体が貪欲であると思います。私のユースケースが機能するには、(CK_\S*)が最初に可能な限り一致する必要があり、その後、ドキュメントの後半で同じ一致が見つかるはずです。
私はメモ帳++を使用しています(PCREを使用)。「。」"\r"および"\n"に一致します。
どんな指針も高く評価されます。
regex - x で始まり、y で終わり、z を含むが途中に x を含まない複数行の文字列に一致する正規表現
例を挙げて説明するとよいでしょう。
これはテキストです:
<li>
で始まり、で終わり、</li>
を含む文字列を検索したいTHE WORDS
。<li> hello THE WORDS </li>
とのみに一致することを期待してい<li> world THE WORDS </li>
ます。
私が試したこと:(?s)<li>.*?(THE WORDS).*?</li>
これで、2試合目は<li> cruel </li> <li> world THE WORDS </li>
.
Sublime Text を使用しています。
regex - 正規表現は、より小さな部分一致を含むすべての一致を取得します
次の入力文字列があります
および次の正規表現:
この正規表現は、次のより大きな一致のみを提供します
より小さな一致を取得するために正規表現を使用する方法は?
貪欲でない演算子を使用してみましたが、どちらも機能しませんでした。
また、Java や C# の一致グループや一致コレクションなどを使用して、両方を一致グループとして取得することは可能ですか?
python - Python での貪欲でない dotall 正規表現
PHP で記述されたメソッドのアノテーションを解析する必要があります。それらを検索するための正規表現 (以下の単純化された例を参照) を作成しましたが、期待どおりに機能しません。/**
との間のテキストの最も短い部分に一致する代わりに*/
、ソース コードの最大量に一致します (以前のメソッドは注釈付き)。私は正しい.*?
貪欲でないバージョンを使用していると確信し*
ており、DOTALLがそれをオフにする証拠は見つかりませんでした。どこに問題があるのでしょうか?ありがとうございました。
regex - クエスチョンマーク「レイジー」モードに関する正規表現
?
ここのマークが「怠け者」を意味することは理解しています。
私の質問は本質的に[0-9]{2}?
vsです[0-9]{2}
それらは同じですか?
もしそうなら、なぜ前者の式を書いているのでしょうか? レイジー モードはよりコストのかかるパフォーマンスではありませんか?
そうでない場合、違いを教えていただけますか?
regex - Bash : 文字列を検索し、その周りの c-commentary 記号を削除します (できればインプレース編集)
私はすでに長い間これに悩まされています: テキスト ファイル内の文字列を照合し、その周りの C コメントを削除する必要があります。編集はインプレースまたは新しいファイルに行う必要があります (その後、mv-command を移動してプッシュします)。
文字列は簡単に見つかりますが、コメントを削除するにはどうすればよいですか? 行数は常に同じではありません。削除は貪欲ではない必要があり(同じファイルに変更してはならない類似のデータがあります)、全体的な「パターン」が複数行であるため、私はそれを理解できませんでした。望ましい出力:
ワークフローは次のようになるはずです。
string_to_match を見つけ、前の最初の /* を見つけて削除し、次の最初の */ を削除します。
ソリューションが自動的に機能する場合は素晴らしいでしょう
バッシュアマチュアからの事前の感謝!私はSEDで成功しませんでした。AWK の解決策とばかげた説明も歓迎します。ご挨拶!
javascript - 単純な .* を実行するのはなぜですか? 非貪欲な正規表現は、一致の前に貪欲に追加の文字を含めますか?
私はこれに似た非常に単純な正規表現を持っています:
HOHO.*?_HO_
このテスト文字列で...
fiwgu_HOHO_HOHO_HOHOrgh_HOHO_feh_HOHO___HO_fbguyev
- 私はそれがちょうど一致することを期待しています
_HOHO___HO_
(最短一致、貪欲ではない) - 代わりに一致し
_HOHO_HOHO_HOHOrgh_HOHO_feh_HOHO___HO_
ます (最長一致、貪欲に見えます)。
なんで?最短一致に一致させるにはどうすればよいですか?
を追加および削除しても?
、同じ結果が得られます。
編集[^HOHO]
-機能しない理由を示すより良いテスト文字列:fiwgu_HOHO_HOHO_HOHOrgh_HOHO_feh_HOHO_H_O_H_O_HO_fbguye
私が考えることができるのは、複数回一致している可能性があるということだけです-しかし、 の一致は1つしかないため、で終わる最短の一致を取得せず、残りを破棄する_HO_
理由がわかりません。_HO_
「貪欲でない正規表現は貪欲に振る舞う」などのタイトルで見つけられるすべての質問を閲覧しましたが、それらにはすべて他の問題があるようです。