問題タブ [recursive-regex]

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

python - Python での正規表現による入れ子構造の照合

DotNet の正規表現には、" " でのグループ化のように、ネストされた構造の正しい一致を可能にする特別なメカニズムがあることを覚えているようです( (a ( ( c ) b ) ) ( d ) e )

この機能に相当する Python は何ですか? これは、正規表現と回避策を使用して実現できますか? (ただし、正規表現の現在の実装が設計されていないような問題のようです)

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

.net - 正規表現、後方参照または代替構造

このような関数のリストから関数全体をキャプチャするために、.NET で正規表現を作成しようとしています。

だから私は得た

これにより、最後の関数を除くすべてがキャプチャされます...またはこれ

これにより、最初の関数を除くすべての関数が正しく一致します。最初の関数は部分的にしか一致しません。

何か案が?可能であれば、いくつかの説明を提供してください。

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

java - 再帰をサポートする Java 正規表現ライブラリ

次のような再帰をサポートする Java regexp lib を探しています。

JDK はそれをサポートしていません。ORO もどちらもサポートしていません。

そのようなことを知っている人はいますか?

ありがとう、オンドラ

編集: http://www.php.net/manual/en/regexp.reference.recursive.phpを参照してください。

そして、私はこの表現のためにそれを必要とします:

(?:mUi)^/--++ *+(.*)(?: *(?<= |^)\\.((?:\\([^)\\n]+\\)|\\[[^\\]\\n]+\\]|\\{[^}\\n]+\\}|<>|>|=|<){1,4}?))?$((?:\\n.*+)*)(?:\\n(?0)|\\n\\\\--.*$|\\z)

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

.net - PCRE 再帰正規表現パターンを .NET バランシング グループ定義に変換する

PCRE には再帰パターンと呼ばれる機能があり、ネストされたサブグループの照合に使用できます。たとえば、「文法」について考えてみましょう。

パターンを使用してPCREで実行できます

(テストケースの例: http://www.ideone.com/L4lHE )

一致する必要があります:

abcdefg abc,def,ghi abc,,,def ,,,,,, [abc;] [a,bc;] sss[abc;d] as[abc;d,e] [abc;d,e][fgh;j,k] <abc> [<a>b;<c,d>,<e,f>] <a,b,c> <a,bb,c> <,,,> <> <><> <>,<> a<<<<>>><a>> <<<<<>>>><><<<>>>> <z>[a;b] <z[a;b]> [[;];] [,;,] [;[;]] [<[;]>;<[;][;,<[;,]>]>]

一致しない:

<a bc> <abc<de> [a<b;c>;d,e] [a] <<<<<>>>><><<<>>>>> <<<<<>>>><><<<>>> [abc;def;] [[;],] [;,,] [abc;d,e,f] [<[;]>;<[;][;,<[;,]>]]> <z[a;b>]

.NET には再帰パターンはありません。代わりに、単純なネストされたパターンを照合するためのスタックベースの操作用のバランシング グループを提供します。

上記の PCRE パターンを .NET Regex スタイルに変換することは可能ですか?

(はい、これには正規表現を使用しないほうがよいことはわかっています。これは単なる理論上の質問です。)

参考文献

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

php - PCRE の制限により、正規表現によって Apache がクラッシュする

私は現在、bbcode 解析エンジンを作成していますが、自分では理解できない状況に遭遇しました。

問題は、私がこの問題とまったく同じような問題に遭遇したことです: Windows 上の Apache / PHP が正規表現でクラッシュする

つまり、以下の例のようなものを作成すると、再帰カウントが 690 (PCRE のメモリ制限は 1MB) に達するため、Apache がクラッシュします。

*したがって、正規表現でandの必要性を何らかの形で最小限に抑える必要がありますが、+それは私がアイデアを持っていない場所なので、何か提案できるかもしれません.

(ネストされたタグを処理できる) bbcode を解析するための他のアプローチを歓迎します。しかし、私はすでに構築されたクラスなどを使用したくありません。何でも自分でやるのが好き!

PECL と Pear HTML_BBCodeParser も調べました。しかし、アプリケーションを拡張機能に依存させたくありません。おそらく、その拡張子をチェックするスクリプトを実行し、存在しない場合は、ここで実行しようとしている BBCode パーサーを使用する可能性があります。

私の説明が暗い場合は申し訳ありません。私は英語が得意ではありません^^

編集。したがって、正規表現は次のように説明しました。

これは私の開始タグです。名前付きグループを使用しました。「タグ」でタグを識別し、「属性」でタグの属性を識別します。タグも属性と考えてください。では、ここで何が起こっているのでしょうか? タグを一致させようとします。タグが一致する場合は、タグ クロージャに到達するまで、=記号の後のものまたは (スペーサー) の後のものと一致させようとします。\s]

ここで、コンテンツを一致させようとしています。これはトリッキーな部分です。[ ではない文字を探しています。見つかった場合は、それが終了タグまたは再帰でないかどうかを確認し、正規表現エンジンにそうするように指示します....

...終了タグが見つかりました。

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

regex - 文字が 2^n - 1 回繰り返される場合にのみ、この再帰正規表現が一致するのはなぜですか?

高度な正規表現手法に関するpolygenelubricantsの一連の記事 (特にHow does this Java regex detect palindromes? )を読んだ後、再帰 (PHP で) を使用して、回文を解析する独自の PCRE 正規表現を作成することを試みることにしました。

私が思いついたのは:

この表現についての私の理解では、0 文字または 1 文字 (2 文字未満のすべての文字列は暗黙的に回文であり、再帰で奇数の長さの回文を説明するため) に一致するか、2 つの同じ文字が分離されている必要があります。パターンの再帰によって。

残念ながら、 www.ideone.com/a9T3Fで確認できるように、そのようには機能していないようです。代わりに、2 n - 1 文字の文字列 (つまり、空の文字列、a, aaa, aaaaaaa, a 15 ) の繰り返し文字のみが正規表現に一致します。

奇妙なことに、再帰がオプションになるようにパターンを変更すると (つまり、 www.ideone.com/D6lJR^(([a-z])(?1)?\2|[a-z]?)$を参照してください。2 n回繰り返される文字 (つまり、空の文字列、、、、、a 16 )を持つ文字列にのみ一致します。 .aaaaaaaaaaaaaaa

正規表現が期待どおりに機能しないのはなぜですか?

正規表現を使用しないことを提案したくてうずうずしている人々への注意:
この質問のポイントは、再帰的な正規表現を適切に使用する方法を学ぶことです。これは、文字列が回文かどうかを判断する効果的な方法ではないことはわかっています。また、何らかの理由で製品コードで回文を判断する必要がある場合は、再帰的な正規表現を使用しません。正規表現の高度な側面についてもっと知りたいだけです。

0 投票する
5 に答える
180 参照

php - {{と}}の間のすべてに一致する必要があるreg式のパターン

{{と}}の間のすべてに一致する必要があるreg式のパターン

ウィキペディアを解析しようとしていますが、rexexコードを実行した後、孤立した}}になってしまいます。これが私のPHPスクリプトです。

問題は、{{と}}をネストしたことだと思います。例:

{{何か{{何か他の{{何か新しい}}{{何か古い}}何か青い}}何か緑}}

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

php - ネストされた正規表現...私は無知です!

PHP と正規表現に関してはまったく無知ですが、フォーラムの壊れたプラグインを修正しようとしています。

以下を交換したいと思います。

実際、その部分は簡単で、これを行うためにプラグインを部分的に修正しました。次の正規表現はpreg_replace_callback()、置換を行うための呼び出しで使用されています。

コールバック コードは次のとおりです。

そして、それは上記の例(ネストされていないブロック引用)で機能します。ただし、次の例のようにブロック引用符がネストされている場合:

うまくいきません。私の質問は、正規表現/PHP の組み合わせを使用して、ネストされたすべての引用符を置き換えるにはどうすればよいですか? PHPで再帰パターンが可能であることは知ってい(?R)ます; 次の正規表現は、ネストされたすべての引用符を含む文字列からそれらを抽出します。

preg_replace_callback()しかし、そこから先は、ネストされた各ブロック引用を上記の置換で置き換えるためにコールバックで何をすべきかよくわかりません。

どんな助けでも大歓迎です。

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

.net - 任意の深さで関数を解析するための正規表現

内部に含まれる関数の単純な言語 (Excel 数式) を解析しています。関数名は、任意の文字で始まり、その後に任意の数の文字/数字が続き、左括弧で終わる必要があります (間にスペースを入れないでください)。たとえばMyFunc(。関数には、他の関数を含む任意の引数を含めることができ、閉じ括弧で終了する必要があり)ます。もちろん、括弧内の数学は許可されており、先ほど説明した関数規則に違反するため、関数として検出されるべきでは=MyFunc((1+1))ありません。(1+1)私の目標は、数式内の最高レベルの関数呼び出しを認識し、関数名を特定し、引数を抽出することです。引数を使用して、他の関数呼び出しを再帰的に探すことができます。

このチュートリアルを使用して、次の正規表現をハックしました。誰もトリックをしていないようです。以下に貼り付けたテストケースでは、どちらも失敗します。

これは機能するはずですが、完全に失敗します:

これは多くのテスト ケースで機能しますが、以下のテスト ケースでは失敗します。ネストされた関数を正しく処理しているとは思わない-ネストされた開き括弧/閉じ括弧を探すだけです:

それらすべてを破るテストは次のとおりです。

これは次のように一致する必要があります。

代わりに、次のように一致します。

外部メモリを提供する.net RegExを使用しています。

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

ruby - 最も単純なRubyの正規表現に一致するRuby正規表現

Rubyスクリプトのテキストで正規表現(少なくとも基本的なもの、すべての可能な種類ではありません...今のところ...)を一致させたいです。
それは...のようなものです\/\^? oh my god... \$?\/[eimnosux]*

たぶん、ここで再帰的な正規表現が必要です。