問題タブ [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 投票する
1 に答える
5758 参照

regex - Perl の正規表現を使用してバランスのとれたテキストに一致させることはできますか?

Perlで括弧などで囲まれたテキストを一致させたいです。どうやってやるの?


これは公式 perlfaqからの質問です。perlfaq を Stack Overflow にインポートしています。

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

php - 括弧と除算演算子の一致 - 正規表現

例:

次の正規表現は、下括弧がない場合に機能します。

以下は対応する括弧を行います

それらを「組み合わせる」方法がわかりません-除算バランスのとれた括弧を処理する単一の正規表現を記述します。

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

php - 文字列を配列に解析する{{navigation({"class": "navigation"、 "id": "navigation"})}}パート2

質問を単純化しましょう:

必要なのは、角かっこで囲まれたコンマで文字列をexplode()することだけです。問題は、コンマで選択された要素自体にコンマを含めることができるため、単純な展開が機能しないことです。JSONをデコードする方法を尋ねていません。

引数の数、それらのタイプは常に異なります。

私がコードのこの部分を持っていると仮定すると:

誰かが正規表現(または代替方法)を提案して、すべてのコンマ区切りのエントリを(文字列として)取得できますか?問題は、変数自体にコンマを含めることができることです。したがって、これには再帰が必要だと思います。

期待される結果は、次のエントリを含む配列になります。

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

regex - Classic ASP には、サーバー上の DOM 要素を参照および変更するために使用できるオブジェクトがありますか?

私は、ユーザーがコピーしてフォームに貼り付けるコードを変更する機能を必要とする従来の ASP アプリケーションで作業しています。ユーザーは、html に精通していない信頼できるユーザーと見なされます。

width=""ユーザーが提供されたコードのすべての属性を変更したい場合、テキストボックスラベルの幅に正しい値を入力して保存/送信を押すだけでよいようにしようとしています。次に、スクリプトはすべての幅属性を検索し、提供された html スニペットでそれらの値を更新します。

私はこれを行うための正規表現に取り組んできましたが、調査中に、多くの人がこの種のことに対して正規表現を推奨せず、何らかの html パーサー オブジェクトを使用したいと考えていることを読みました。

従来の ASP で利用できる html パーサーまたは DOM ブラウザー/エディターはありますか? それとも正規表現の開発を続ける必要がありますか?

正規表現の場合、これは私がこれまでに持っているものです...最初のものだけでなく、すべての一致で置換を実行するように変更する必要があります:

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

.net - 空のHTMLタグをすべて削除しますか?

私が考えている関数は正規表現を使用することを想像しており<p><strong></strong></p>、文字列内のすべての空のHTMLタグを削除するようなインスタンスでは再帰的になります。これは、可能であれば空白を考慮に入れる必要があります。<文字が属性値で使用されていたというクレイジーな例はありません。

私は正規表現でかなりひどいですが、これは可能だと思います。どうすればいいですか?

これが私がこれまでに持っている方法です:

ただし、現在の正規表現はPHP形式であり、機能していないようです。.NET正規表現の構文に精通していません。

正規表現を使用しないでくださいと言っているすべての人に:私はパターンが関係なくどうなるか興味があります。確かに、すべての開始/終了開始タグをタグの間に任意の量の空白(またはなし)で一致させることができるパターンがありますか?<p></p>HTMLタグを任意の数の属性、1つの空のタグ(ちょうどなど)などと一致させる正規表現を見てきました。

これまでのところ、上記の方法で次の正規表現パターンを試しましたが、役に立ちませんでした(たとえば、空の段落タグが削除されていないテキスト文字列があります)。

Regex.Replace(html, "/(<.+?>\s*</.+?>)/Usi", "")

Regex.Replace(html, "(<.+?>\s*</.+?>)", "")

Regex.Replace(html, "%<(\w+)\b[^>]*>\s*</\1\s*>%", "")

Regex.Replace(html, "<\w+\s*>\s*</\1\s*>", "")

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

c# - BBcode 正規表現を修正する方法

BBcode タグを取得する正規表現があります。軽微な不具合を除けば、問題なく動作します。

現在の式は次のとおりです。

正常に照合されたテキストと、作成されたグループは次のとおりです。

[url= http://www.google.com] Google へ [/url]
1: URL
2: http://www.google.com
3: Google へ

[img] http://www.somesite.com/someimage.jpg[/img]
1: img
2: NULL
3: http://www.somesite.com/someimage.jpg

[引用][引用]最初のネストされた引用[/引用][引用]2 番目のネストされた引用[/引用][/引用]
1: 引用
2: NULL
3: [引用]最初のネストされた引用[/引用][引用]2 番目のネストされた引用引用[/引用]

これはすべて素晴らしいことです。同じ正規表現に対して 3 番目の一致グループを実行し、ネストされたすべてのタグを再帰的に処理することで、ネストされたタグを処理できます。問題は、[quote] タグを使用した例にあります。3 番目の一致グループは 2 つの引用タグのセットであるため、2 つの一致が予想されることに注意してください。ただし、次のように 1 つの一致が得られます。

[引用]最初のネストされた引用[/引用][引用]2 番目のネストされた引用[/引用]
1: 引用
2: NULL
3: 最初のネストされた引用[/引用][引用]2 番目のネストされた引用

ああ!それは私たちが望んでいたことではありません。それを修正するかなり簡単な方法があります。私はこれから正規表現を変更します:

これに:

追加すること((?!\[/\1\]).)で、3 番目の一致グループに終了 BBcode タグが含まれている場合、一致全体を無効にします。これが機能するようになり、2 つの一致が得られます。

[引用]最初のネストされた引用[/引用][引用]2番目のネストされた引用[/引用]

[引用]最初のネストされた引用[/引用]
1: 引用
2: NULL
3: 最初のネストされた引用

[引用]2 番目のネストされた引用[/引用]
1: 引用
2: NULL 3: 2 番目のネストされた引用

修正できてよかったのですが、別の問題が発生しました。この新しい正規表現は、1 つの大きな引用タグの下に 2 つの引用タグをネストした最初の正規表現では失敗します。1 つではなく 2 つの一致が得られます。

[引用][引用]最初のネストされた引用[/引用][引用]2番目のネストされた引用[/引用][/引用]

[引用][引用]最初のネストされた引用[/引用]
1: 引用
2: NULL
3: [引用]最初のネストされた引用

[引用]2 番目のネストされた引用[/引用]
1: 引用
2: NULL
3: 2 番目のネストされた引用

最初の一致はすべて間違っており、2 番目の一致は整形式ではありますが、望ましい一致ではありません。最初の式を使用したときのように、3 番目の一致グループが 2 つのネストされた引用タグである 1 つの大きな一致が必要でした。

助言がありますか?このギャップを越えることができれば、かなり強力な BBcode 式が必要です。

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

c# - 正規表現との再帰的一致

次の文字列で式を分割する必要があります。

これらは私が書いたように順番に来るでしょう。各単語は単語の境界で始まり、単語の境界で終わると想定できます。

私はこれを問題なく実行しました。ただし、新しい要件が到着しました。句にはfrom式全体を含めることができます。

つまり、式は次のようになります。

内側の表現を分割する必要はありません。

さて、問題は、そのようなことをするための標準的な方法はありますか?または、完全に自分で手動で行う必要がありますか?

それが重要かどうかはわかりません。私のアプリケーションはC#のものです。

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

java - Java で Ruby 正規表現パターンを作成する方法 (再帰的な名前付きグループ化を含む)?

まあ...私はtintin-scriptを含むファイルを持っています。今では、すべてのアクションと置換を取得して、Ruby を使用して Web サイトで適切に並べ替えられていることを示すことができました。これにより、概要を把握するのに役立ちます。

TINTINスクリプトの例

私のRubyアプリでそれらを取得するには、スクリプトファイルを変数の「入力」に読み込み、次のパターンを使用して「入力」をスキャンします

ここで、私の考えは、netbeans プラットフォームを使用してモジュールを作成し、概要を維持するだけでなく、tintin スクリプト ファイルの編集を支援することでした。そのため、エディタ ウィンドウでファイルを開くには、tintin ファイルを解析し、ファイルからすべての「アクション」と「置換」を取得して eTable に表示する必要があります。修正ウィンドウ。

私はモジュールをセットアップし、これまでのところすべての準備ができています. 名前付きグループのキャプチャのようで、特にこれらのグループの再帰的なアプリケーションは Java ではサポートされていません。それがなければ、実用的な解決策見つけることができないようです...

ルビーの模様がまた…

同じに一致するJavaパターンを作成するのを手伝ってくれる人はいますか?

ヒント/ヒント/アイデア、特に解決策または (解決策に近いコメント) について、事前に感謝します!

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

regex - 再帰的パターン一致の名前付きグループ

私はLaTeXに一致しています-\command{...}{...}の形式のコマンド。2番目の引数はオプションです。私のRegExは、引数内にネストされたLaTeXコマンドが存在する可能性がある場合に注意する必要があるため 、 perl6faqの1つの例をわずかに変更したバージョンです。

名前付きグループを使用したい。これどうやってするの?(?<first>:...)を(?&first)と一緒に使用しようとしましたが、「無限再帰」エラーが発生します。ここでの正規表現に関しては少し頭がおかしいかもしれませんが、これはこれまでのところ非常にうまく機能しました。

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

php - これらの不可能な正規表現の例を変換するプロの正規表現?

入力例

基本的に、私はいくつかのより複雑な正規表現コマンドで問題を抱えています。私が見つけた正規表現を使用するコードのほとんどは非常に単純ですが、うまくいけば、非常に多くの場所で使用できます。私がやろうとしていることの種類を見て、それを変換できるかどうかを確認してください。

  1. 中括弧「(」と「)」の間に1つまたは複数の単語を配列します。
  2. xor 4スペースで終わる改行に続く最初の単語を配列し、次に閉じ中括弧 ")"、スペースと開き中括弧 "("、およびスペースと開き中括弧 "("までのドキュメントの最初の単語。
  3. セミコロンのある行では、セミコロンで区切られた単語を配列します。最後のセミコロンの後の単語を取得しますが、改行または4つの連続したスペースの後の単語は取得しません。文字列「tabulations:」で始まる行の単語は、文字列「tabulations:」で始まる行にセミコロンが付いていても、この配列に含めないでください。中括弧で終わる改行の場合、「)」はセミコロンを含む行の前にあり、代わりに「tabulations」「noalternates」で始まらない。
  4. 文字列「oldstyle:」で始まる行で、コロンの後に改行の前にある1つまたは複数の単語を取得します。中括弧「)」で終わる改行が「tabulations:」の前にある場合-開始行では、代わりに「古いスタイルなし」を配列に追加します。
  5. 文字列「tabulations:」で始まる行を除いて、3と同じです。中括弧「)」で終わる改行が「tabulations:」の前にある場合-開始行の代わりに、配列に「notabulations」を追加します。

私はPHPを介してこれを行う方法を理解しようとしていますが、誰かがこれらの要求を任意の言語、特にphp、C ++、javascript、またはバッチで処理できれば幸いです。また、パズル愛好家にとっても、これらすべてを表示するのは非常に難しいことも知っています。ですから、完全な回答が得られたらすぐに100ボーナスポイントを約束します。

-編集-

私が取り組んでいた最初の解決策

さて、私が取り組んでいた最初の解決策は3を解決することです。セミコロンで行を壊してみました。それから、データを1行ずつ取得して、さらに編集したいと思っていました。

基本的に、出力を見ると、データはすでに存在していたのと同じ形式になり、セミコロンを差し引くだけです。これはあまり役に立たなかったので、やめることにしました。

私が取り組んでいる2番目の解決策

これは、次のコード行に基づいていますpreg_match_all('/\;([^;]+)\}/', $myFile, $matches)

EPBとfgeのおかげで、質問のパート1に対する実用的な解決策があります。

私が抱えていたいくつかの問題は、RegExを正しく使用していないことでした。ArrayArray戻りの問題は、$matchesをプライベート関数に返すようにpreg_match_all関数をカプセル化しなかったことが原因だと思います。まだわかりません。file_get_contents()また、この関数を使用してファイルを読み取る必要があるかどうかもまだわかりません。

3番目の解決策の試み

それで、私はこれにどのようにアプローチしたいかという最初の考えを持っていました、そして私はそれを自分のやり方でやろうと決心しました。繰り返しになりますが、質問1が最も簡単に思えたので、最初に質問1から始めました。例外が最も少ない

私の知る限り、これはうまくいくでしょう。私が抱えている問題は再帰です。試しforeach($output as $output){echo $output;}ましたが、エラーが発生しました。それは、私が再発しておらず、配列されていないためだということは私には明らかなようです。私がこの道に沿って立ち止まった理由は、私が失敗する運命にあると何人かのプログラマーから言われたからです。そのため、現在、ソリューション2の作業に戻っています。