問題タブ [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.
ruby - 逆方向に検索するとき、貪欲でない修飾子を使用するにはどうすればよいですか?
次のようなクエリがあります。
これらのクエリには、不要なプレフィックスとサフィックスが含まれています。非欲張りを使用してプレフィックスを取り除くために正規表現を使用しました.*?SELECT
。
貪欲ではない修飾子を後方検索して接尾辞を削除する方法を見つけることができませんでした。
理想的には、行末から「LIMIT」の最初のマッチまでを消すパターンが欲しい。使っLIMIT.*?
ても何にも合わないし、ただ使っLIMIT.*
ても欲張りだから避けたい。
私は自分の言語に Ruby を使用しています。
これはクエリの例です:
そして、これは望ましい出力です:
regex - 行末のコメントを無視するgrep正規表現
変数を探して多くの古い PowerBASIC ソース ファイルを grep しようとしてgrep
いますが、行末コメント内の変数への参照が一致しないようにするのに苦労しています。
例えば:
最初に私は使用していました:
ただし、コメントのない行を無視するだけでなく、まったく使用ANGLE
しないコード行 (行などDELTA
) も出力します。これは、これらの行のコメント (つまり ) にアポストロフィ ( ) が1 つ含まれているためです。'
AREN'T
出力をパイプして、不要な行を削除することを考えました:
ANGLE
しかし残念ながら、コメントにたまたま「」が含まれている、私が望むコード行も削除されます。
grep を取得して、関連する実際のコードの行と一致させ、コメントに一致する行のみANGLE
を無視するにはどうすればよいですか?
regex - グローバル変数への参照を使用したマッチ メソッド
この質問はこれに大きく関連していますが、グローバル変数への参照を含むメソッドを取得することに関係しています (コメントアウトされていません)。
次の正規表現とテスト文字列を使用して機能するかどうかを確認していますが、部分的にしか機能していません。
正規表現
(サブマッチとしてメソッドの名前を取得できるように、このようにキャプチャ グループで正規表現の一部が必要です)。
テスト文字列
http://www.regexpal.com/を使用すると、グローバル変数を参照する最初のメソッドを強調表示できます。ただし、正規表現は、他の方法で期待することを行っていません。正規表現は、特定のグローバル変数への参照を持たない他のメソッドもピックアップしており、実際にグローバル変数を使用している最後のメソッドで終了します。問題は、[\s\S]+?(GLOBAL_VARIABLE_1)[\s\S]+?End\s+(?:Function|Sub)$
パーツが最小限の/貪欲でない一致を行っているため、実際の一致が見つかるまで探し続けることであると判断しました。
要約すると、式は次の規則に従う必要があります。
- メソッドの宣言の最初の端を検出したときに、現在チェックしているメソッドのスキャンを停止します。この例では、
doThis
とalsoDoThis
メソッドのみが に一致するはずGLOBAL_VARIABLE_1
ですが、正規表現がどうあるべきかわかりません。 - 正規表現は、実際にグローバル変数を使用しているメソッドのみに一致する必要があります
- a
GLOBAL_VARIABLE_1
がコメント化されている場合、実際にはメソッドによって使用されていません。コメントGLOBAL_VARIABLE_1
は、メソッドの肯定的な一致をトリガーするべきではありません。
regex - 正規表現: 最小の文字 (貪欲ではない) と一致するが、N 以上の文字に一致する方法
私はそのようなメソッドを持っていたい leastMatch(String input, String regExp, int n)
input は入力テキスト、regExp は正規表現、n は結果の最小文字数です。
戻り値は、正規表現に一致し、少なくとも n 文字を含む入力テキストの先頭です。
例えば
leastMatch("abababab", "(ab)+", 3) //returns "abab"
leastMatch("abababab", "(ab)+", 0) //returns ""
leastMatch("abababab", "(ab)+", 4) //returns "abab"
regex - Perl 正規表現を使用して真の貪欲でない一致を維持する
次の「tacacatac」という単語から、「cat」と一致させたいと思います。正規表現 c.*?t でこれが得られるはずですが、「c」の最初の出現から始まり、そこから次の「t」が見つかるため、「cacat」と一致すると思います。
(おそらく負の先読みを使用して) 最後の t の直前の c から検索を開始する方法はありますか?
-----編集----- 文字を文字列に置き換えた場合に機能するオプションが必要です
ありがとう。
java - Java分割正規表現の貪欲でない一致が機能しない
非貪欲な一致が機能しないのはなぜですか? 次の例を見てください。
私の目には、結果は次のようになるはずですabc|s:0:\"gef\";s:2
が、次のとおりです。abc|s