問題タブ [regex-lookarounds]
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 - ネストされた正規表現の先読みと後読み
正規表現のネストされた「+」/「-」先読み/後読みに問題があります。
'*'
で文字列を変更したいとしましょう。次の文字をエスケープする'%'
としましょう。'\'
(正規表現をSQLのようなコマンドに変えます^^)。
だから文字列
'*test*'
に変更する必要があります'%test%'
。'\\*test\\*'
->'\\%test\\%'
、しかし'\*test\*'
そして'\\\*test\\\*'
変わらないはずです。
私は試した:
上記の例の「*」に一致する正しい正規表現は何ですか?
このような視覚的な構造を持つ正規表現の違いと、これらが本質的に間違っている場合の(?<!\\(?=\\\\)*)\*
違いは何ですか?(?=(?<!\\)(?=\\\\)*)\*
javascript - Javascript正規表現:何かまで何でも一致します(存在する場合)
私は正規表現に不慣れであり、これは非常に簡単な質問かもしれません(うまくいけば)。
3種類の文字列に1つのソリューションを使用しようとしています
- 「45%」、期待される結果:「45」
- 「45」、期待される結果:「45」
- ""、 期待される結果: ""
私が試していること(文字列をstrにする):
これは私の頭の中では、「見つかった場合は「%」までの任意のインスタンスに一致するか、それ以外の場合は何かに一致する」ように聞こえます。
ファイヤーバグの頭の中では、「何かに一致し、ネガティブな先読みを完全に無視する」ように聞こえます。また、それを怠惰にするために---(.*)?
役に立たないようです。
この特定の状況では、私は数字だけを照合しているので、そうする/\d*/
ことを少しの間忘れましょう。いつでも適用できるように、一般的なルールを理解しようとしています。
誰かが私を助けてくれるほど親切ですか?
regex - 文字列に一致する正規表現-前向きな先読み
正規表現:(?=(\d+))\w+\1
文字列:456x56
やあ、
この正規表現が文字列「456x56」の「56x56」とどのように一致するかという概念がわかりません。
- ルックアラウンド(?=(\ d +))は、456をキャプチャし、\ 1に入れて(\ d +)
- 単語文字\w+は、文字列全体に一致します( "456x56")
- \ 1は456であり、その後に\w+を続ける必要があります
- 文字列をバックトラックした後、単語文字の前に「456」がないため、一致するものが見つからないはずです。
ただし、正規表現は56x56に一致します。
java - 条件付き先読みの Java サポート
以下では、結果から除外しようとしている郵便番号を考えてみましょう33333-
。
そうです:
取得することを期待:
次の形式を強制しようとしています:
5 桁の後にオプションで - と 4 桁。- (ハイフン) だけの 5 桁は必要ありません
例外が発生します:
条件付き先読みを正しく使用していませんか?
c# - 肯定的な先読みと否定的な先読みを組み合わせますか?
私は正規表現が苦手ですが、次のものがありますが、次の手段の一部は13〜16桁を探し、その後3〜4桁が見つかった場合は成功を返すと想定しています。問題は、3 桁から 4 桁はオプションであり、13 桁から 16 桁の数字の前にもある可能性があるため、正の先読み/後読み、負の先読み/後読みを組み合わせたいと思います。これは複雑に思えますが、もっと簡単な方法はありますか?
これは、次のスニペットの ccnum とシリーズに一致します。
ただし、ccnum またはシリーズを削除すると、何にも一致せず、シリーズはオプションになる可能性があります。また、シリーズは ccnum の前後に表示される可能性があるため、シリーズ属性を ccnum 属性の前に配置すると、どちらにも一致しません。また、ccnum の前に別の要素としてシリーズがある場合、またはシリーズ要素を無視した場合にも一致しません。
次のシナリオに一致する正規表現が必要ですが、要素の正確な名前がわかりません。この場合、ccnum と series と呼んでいます。
機能するものは次のとおりです。
次のものにも一致する必要がありますが、一致しません。
現在、これを機能させるために、3 つの個別の正規表現を使用しています。
1 は、セキュリティ コードの前にあるクレジット カード番号と一致します。
1 は、クレジット カード番号の前にあるセキュリティ コードと一致します。
1 はクレジット カード番号のみに一致します。
式を or に結合しようとしましたが、合計 5 つのグループになりました (最初の 2 つの式から 2 つ、最後の式から 1 つ)。
regex - grepで'が続かない'の正規表現先読み
私は、文字Ui\.
が続かない、Line
または文字だけでさえないすべてのインスタンスをgrepしようとしていますL
別の文字列が続かない特定の文字列のすべてのインスタンスを検索するための正規表現を作成する適切な方法は何ですか?
先読みの使用
regex - 正規表現の先読み
私は正規表現を使用して以下を見つけています:
次の文字に到達するまで、任意の文字が続きます。
この正規表現を実行すると、次のようになります。
このテキストについて:
私は得ることを期待しました:
しかし、代わりにそれはすべてに一致します。正規表現の経験が豊富な人は、私がどこで間違っているか知っていますか?私は以前にパターンマッチングに正規表現を使用しましたが、これは先読み/先読みの私の最初の経験です。
ヘルプ/ヒント/ポインタを事前に感謝します:-)
regex - 正規表現の前向き先読み
この肯定的な先読みが太字のテキストと一致しないのはなぜですか? (ない . ではない ->)
ヒント6 . ai_flags = 0; // コメント Hints.ai_flags
ヒント6 . ai_family = AF_UNSPEC;
int newsocket = socket(結果-> ai_family ,結果-> ai_socktype ,結果-> ai_protocol );
java - 先読みによる正規表現のパフォーマンス/速度の低下
私は、いくつかの先読みを伴う式で非常に遅い実行時間を観察してきました。
これは基礎となるデータ構造によるものだと思いますが、かなり極端なようで、何か間違ったことをしたのか、それとも既知の回避策があるのか 疑問に思っています.
問題は、一連の単語が任意の順序で文字列に存在するかどうかを判断することです。たとえば、「term1」と「term2」という 2 つの用語が文字列のどこかにあるかどうかを調べたいとします。私は式でこれを行います:
しかし、私が観察したことは、これは最初にチェックするよりも桁違いに遅いということです
そしてちょうどその時
これは、先読みのある単一のパターンではなく、パターンの配列を使用する必要があることを示しているようです...これは正しいですか? それは間違っているようです...
テスト コードの例と結果の時間は次のとおりです。
これは私のコンピューターに出力されます:
python - 後者をキャプチャせずに別の文字列が続く文字列に一致する正規表現
先読みアサーションを非キャプチャにする機能はありますか?のようなものbar(?:!foo)
とbar(?!:foo)
動作しない(Python)。