問題タブ [lookaround]

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 投票する
3 に答える
1482 参照

.net - 正規表現:否定文字クラスのネガティブルックビハインド?(.NETフレーバー)

私がやろうとしていること:特定のエスケープされていない文字を囲む最も内側のエスケープされていない角括弧を削除します(エスケープ\です)

input:[\[x\]]\]\[[\[y\]]
yの周りの角かっこを[\[x\]]\]\[\[y\]
探すときの出力:xの周りの角かっこを探すときの出力:\[x\]\]\[[\[y\]]

つまり、特定の文字の周りのエスケープされていない括弧のセットのみを削除します。

私はこれを(yに対して)試しましたが、それは最初のエスケープされていない(xの前)と最後の。Regex.Replace(input, @"(?<!\\)\[(.*?(?<!\\)y.*?)(?<!\\)\]",@"$1"と一致するようです。ワイルドカードを否定文字クラスに置き換えて除外および除外できると考えましたが、実際に否定する必要があるのは、これらのエスケープされていないバージョンであり、否定文字クラスのように否定の後ろ姿を取り入れようとすると、何も一致しないようです。まったく。[].[](?<!\\)

時間と労力をよろしくお願いします。

編集:

明確にするために、エスケープされていない角括弧の内容は、関心のあるエスケープされていない文字()が含まれている限り、何でもかまいません(別のエスケープされていない角括弧を除くy)。角かっこの内容はすべてそのままにしておく必要があります。

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

regex - 一連の文字に出会ったときに一致を停止する:後読みを修正する

私は次の正規表現を持っています:

hello world!文字列に一致するように設計されていますhello world! [[A string typically used in programming examples]]

しかし、私は文字列全体に一致するだけで、その理由がわかりません。ルックアラウンドのすべてのフレーバーを試しましたが、うまくいきません...

誰もがこの問題を解決する方法を知っていますか?

ありがとう、
CFP。

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

regex - 正規表現の先読み、後読み、およびアトミックグループ

私は正規表現の体でこれらのものを見つけましたが、私はそれらを何に使うことができるかについての手がかりを持っていません。誰かが例を持っているので、それらがどのように機能するかを理解しようと試みることができますか?

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

regex - ルックアラウンドは、正規表現で照合できる言語に影響しますか?

最新の正規表現エンジンには、その機能なしでは照合できなかった言語を照合できる機能がいくつかあります。たとえば、後方参照を使用する次の正規表現は、繰り返される単語で構成されるすべての文字列の言語に一致します: (.+)\1. この言語は正規表現ではないため、後方参照を使用しない正規表現とは一致しません。

ルックアラウンドは、正規表現で照合できる言語にも影響しますか? つまり、ルックアラウンドを使用して一致させることができ、他の方法では一致できなかった言語はありますか? もしそうなら、これはルックアラウンドのすべてのフレーバー (否定的または肯定的な先読みまたは後読み) に当てはまりますか、それともそれらの一部だけに当てはまりますか?

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

java - Javaで文字列を2つの部分に分割する必要があります

連続した数字のチャンクと連続した文字のチャンクを含む文字列があります。それらを 2 つの部分 (1 つの整数部分と 1 つの文字列) に分割する必要があります。

を使ってみString.split("\\D", 1)たのですが、最初の文字を食い尽くしています。すべての String API をチェックしましたが、適切なメソッドが見つかりませんでした。

これを行う方法はありますか?

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

regex - 正規表現 '(?<=#)[^#]+(?=#)' はどのように機能しますか?

C# プログラムに次の正規表現があり、理解するのが困難です。

私が理解したと思うものに分解します:

だから私が抱えている問題は?<=and?<の部分です。MSDN を読むと、?<name>グループの名前付けに使用されますが、この場合、山かっこは決して閉じられません。

ドキュメントで見つけることができません?=でした。検索エンジンはこれらの特殊文字をほとんど無視するため、検索するのは非常に困難です。

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

c# - C# で文字列から最後の一致を抽出する

私はフォームに文字列を持っています[abc].[some other string].[can.also.contain.periods].[our match]

私は今、文字列「私たちの試合」(つまり、括弧なし)に一致させたいので、ルックアラウンドなどで遊んだ。正しい一致が得られましたが、これはきれいな解決策ではないと思います。

言語は .net/c# です。正規表現を使用しないより簡単な解決策があれば、私も知りたいです

私を本当にいらいらさせているのは、(.*?)後読みでは非貪欲が機能しないように見えるため、文字列をキャプチャするために使用できないという事実です。

私も試しました: Regex.Split(str, @"\]\.\[").Last().TrimEnd(']');、しかし、私はこの解決策を本当に誇りに思っていません

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

java - 正規表現の最適化に関する質問

個人的な学習課題として、単項文字列を長さが 2 のべき乗で増加する部分に分割するために、次の正規表現を作成しました ( ideone.com も参照)。

これは、ルックアラウンド中のキャプチャ、ネストされたルックアラウンド、後方参照でのマッチング、および無限長の後読み (Java では公式にサポートされていませんが、とにかく動作します) の組み合わせを使用します。2 のべき乗の合計のプロパティと、文字列に単項アルファベットがあるという事実も利用されます。

このソリューションは判読不能であり、パフォーマンスも最悪です。

私の質問は、この正規表現をどのように「最適化」しますか?

  • 正規表現を読みやすくできますか (パフォーマンスが悪くても問題ありません)
  • 正規表現のパフォーマンスを向上させることはできますか (読みにくくても構いません)
0 投票する
3 に答える
3369 参照

javascript - 正規表現:文字の後に単語を検索しますが、結果に文字を含めないでください

これが私が持っているかもしれない文字列です:

次のjavascript正規表現を使用して、角かっこの後のテキストがで始まる場合はそれを取得しましたMy

これに伴う問題は、それを見つけたのは文字/文字であるため、結果に最初の括弧が含まれることです。

結果のブラケットを削除するにはどうすればよいですか?


編集

詳細についてC Languageは、SHJSシンタックスハイライトのjavascriptファイルを編集しています。

この質問に関連するすべてのコードは次のとおりです。

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

java - この Java 正規表現は回文をどのように検出しますか?

これは、一連の教育用正規表現記事の第 3 部です。この正規表現はどのように三角数を見つけますか? (ネストされた参照が最初に導入された場所)およびa^nb^n を Java 正規表現とどのように一致させることができますか? (先読み「カウント」メカニズムがさらに詳しく説明されています)。この部分では、入れ子になったアサーションの特定の形式を紹介します。これを入れ子になった参照と組み合わせると、ほとんどの人が「不可能」だと信じているものに Java 正規表現を一致させることができます: 回文!!

回文の言語は規則的ではありません。実際には文脈自由です (特定のアルファベットに対して)。とはいえ、最新の正規表現の実装は通常の言語以上のものを認識し、Perl/PCRE の再帰パターンと .NET のバランシング グループは回文を容易に認識できます (「関連する質問」を参照)。

ただし、Java の正規表現エンジンは、これらの「高度な」機能のいずれもサポートしていません。それでも、「誰か」( *wink* )は次の正規表現を書くことに成功しまし

これはうまくいくようですが、どうですか?

参考文献


コモンセンスアラート!!!

これは回文を検出する最良の方法ではありません。O(N^3)せいぜいです。より汎用的なプログラミング言語でこの検出を実行すると、より効率的で簡単になります。

素数を見つけるために正規表現を使用したくないのと同じ理由で、回文を検出するために正規表現を使用したくないでしょう。そうは言っても、素数性のテストに正規表現を使用する方法を研究するのと同じ理由で、非再帰的非平衡グループ正規表現がどのように回文を検出できるかを研究します。それは楽しい、やりがいがある、教育的です。

関連する質問