問題タブ [backreference]

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

parsing - カスタムリライトアクションでASTをバックリファレンスする方法は?

私はこの問題の回避策をすでに知っていますが、少なくとも1つの理由から、この1つのアプローチを実際に使用したいと思います。それは機能するはずです。

これは、TerenceParrによる「TheDefinitiveANTLR Reference」から抜粋したルールです(本はANTLR3用です)。

INTが続かない場合+、結果はINT(単一ノード)になります。そうである場合、サブツリーは最初INT(と呼ばれる$expr)を左ブランチとして構築されます。

同様のルールを作成したいのですが、カスタムアクションを使用します。

ANTLRはそのようなルールを受け入れますが、入力(たとえば)「5 * 3」でパーサーを実行すると、「行1:1に'*'5でEOFがありません」というエラーが表示されます。

質問:カスタム書き換えアクションでバックリファレンスを使用する方法は?

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

regex - sed でグループ化が機能しない

これは期待どおりに機能します。

入力ファイル src.txt:

指図:

期待どおりの結果:

次に、これらが期待どおりに機能しないのはなぜですか。

指図:

期待される:

実結果:

指図:

期待される:

実結果

括弧はグループ化には機能していないようですが、私が見つけたすべてのチュートリアルと例は、それらが必要であると想定しているようです...

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

python - Python 正規表現での否定一致のキャプチャ

私は貪欲ではない否定的な一致をしようとしていますが、それもキャプチャする必要があります。これらのフラグを Python で使用しています。re.DOTALL | re.LOCALE | re.MULTILINE、各フィールドがバックスラッシュの新しい行で始まるいくつかのテキスト ファイル 'データベース' の複数行のクリーンアップを実行します。各レコードは \lx フィールドで始まります。

各 \ge フィールドには、そのレコード内のどこかに \ps フィールドが 1 つずつあることを確認しようとしています。現在、1 つの \ps の後に複数の \ge が続くことが多いため、上記の 2 つの単独の \ge のようにコピーする必要があります。

必要なロジックのほとんどは次のとおりです。任意の \ps フィールドの後で、別の \ps または \lx に遭遇する前に、\ge を見つけ、次に別の \ge を見つけます。\ps フィールドを 2 番目の \ge の直前までコピーできるように、すべてをキャプチャします。

そして、これが私の非機能的な試みです。これを置き換えます:

これとともに:

小さなファイル (34 行) でもメモリ エラーが発生します。もちろん、これが機能したとしても、3 番目または 4 番目の \ge ではなく 2 番目の \ge を処理しようとしているだけなので、複数回実行する必要があります。ですから、その点でのアイデアは私にも興味があります。

更新:少し調整が必要な場合もありましたが、Alan Moore のソリューションはうまく機能しました。悲しいことに、DOTALL をオフにする必要がありました。そうしないと、最初の .* を後続の \ps フィールドを含めて防ぐことができなかったからです。形。しかし、正規表現のドット情報で、(?s) 修飾子について知ってうれしく思いました。これにより、一般的に DOTALL をオフにすることができましたが、それ不可欠な他の正規表現では引き続き使用できます。

これは、私が必要とする1行の形式に要約された、推奨される正規表現です:

それは機能しましたが、上記の例を変更すると、「注 2」の上に \ps が挿入されました。また、\lxs および \ge2 を \lx および \ge と同じように扱っていました (いくつかの \b が必要でした)。だから、私は少し微調整されたバージョンを使いました:

およびこの置換文字列:

再度、感謝します!

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

php - かっこなしで正規表現で縦棒で区切られたオプションをグループ化しますか?

括弧を使用せずに正規表現の一部をグループ化することは可能ですか? または、言い換えれば、特定の括弧付きステートメントと一致しませんか? つまり、次の正規表現を考えてみましょう。

今。最初の 2 つのサブクエリ (縦棒のあるサブクエリ) に注目してください。それらが発生するのを防ぐにはどうすればよいですか?「彼は誰ですか」の場合$input、「彼」だけが一致するサブクエリになるようにします。

$matches[3]この例では、つかむだけで正しい結果が得られることを理解しています。ただし、アプリケーションの性質上、動的に正規表現を生成しているため、この例のような構造になるとは限りません。X 個の縦棒で区切られたサブクエリと、Y 個の(.+)サブクエリを持つことができます。私はそれらを一致させたいだけです(.+)

これを行うことは可能ですか?必要に応じて正規表現を書き直しても問題ありませんが、サブクエリをマークする括弧を使用せずにステートメントをグループ化する方法がわかりません。問題があれば、私はPHPを使用しています。

ありがとう!

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

python - Python Regex: 後方参照のエスケープ

これが私の状況です:

それ自体が文字のグループであるため (それ自体) の後に [\W(itself)] を追加したいのは簡単です (特別な場合があります)。だからこそ、特別な意味をすべて取り除くためにセットに入れる必要があるのです。ただし、私のグループはSETにすることができます。ネストされたセットが機能しないことはわかっています。グループを安全にセットに入れるために角括弧をエスケープ/削除するにはどうすればよいですか?

私の他の試みは、代わりに \1(\W|\1)* を使用することでしたが、グループ内の可能な角括弧をエスケープせずに、グループ内の文字をエスケープする必要があります。どうすればいいですか?

これはジレンマです。この問題を解決する方法と、どちらに進むべきかわかりません。助けてください。

どうもありがとうございました。

編集:ステップをスキップしました。\ ([^\] の部分) の文字を一致させて説明した式に置き換えた後、似たような文字のセットに置き換える必要がある場合があります。つまり、'a' は '[a@]' になり、's' は '[s5$]' になります... 質問は本当に間違っていました。しかし、私は問題を解決したので、私が以前に書いたことからまだ何らかの意味を理解しようとしている場合は、しないでください:)

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

ruby - グループ化を使用するときに、gsub を使用して Ruby 正規表現 (regex) で後方参照する方法は?

Web ページから抽出したテキスト データにパッチを適用したいと考えています。サンプル:

2 番目の文の末尾のポイントの後にスペースはありません。これは、元の文書では 3 番目の文が (br タグの後に) 別の行にあったことを示しています。

この正規表現を使用して、「\n」文字を適切な場所に挿入し、テキストにパッチを適用したいと考えています。私の正規表現:

しかし、残念ながらうまくいきません: "NoMethodError: undefined method `+' for nil:NilClass" 一致したグループを適切に後方参照するにはどうすればよいですか? Microsoft Word ではとても簡単だったので、\1 と \2 記号を使用するだけで済みました。

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

javascript - JavaScript 正規表現後方参照

これはphp 正規表現の続きです: 電話番号 7 ~ 12 桁にはハイフンまたはスペースが含まれる場合があります

私はまだ後方参照を理解しようとしています。以下は、後方参照をテストするために思いついた JavaScript コードです。このコードを実行するnullと、出力されるだけです。どこが間違っていますか?

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

c# - c# 後方参照から値を取得する

次のような XML ファイルからデータベース接続文字列を抽出しようとしています。

理想的には、一緒に戻ってくるグループが欲しい

[0] = データ ソース=Instance_1;ユーザー ID=;初期カタログ=DB1;プロバイダー=SQLOLEDB.1;統合セキュリティ=SSPI;自動変換=False;

[1] = DB1

だから私はこの正規表現を持っています:

したがって、最初の () で値をキャッチします。完全な接続文字列とデータベースのみの両方をキャプチャするために正規表現を実行できる方法はありますか?

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

python - 正規表現: 一致した時間 {n} で後方参照を使用していますか?

正規表現を使用して文字列のリストに一致させたい: 1a, 2aa, 3aaa... 文字列の最初の数字は、その数字に続く a の数を示します。

本能的に、後方参照が役立つかもしれないと思いますが、それは真実ではありません。

正規表現では、後方参照を使用して、以前にキャプチャしたサブパターンと一致させることができます。たとえば、(.+) \1に一致しaaa aaaます。

パターンが一致した回数{n}{n,m}またはで後方参照を使用できますか{n,}?

たとえば、\da{\1}理想的には に一致3aaaしますが、これを python building modulereでテストしましたが、機能しません。\da{\1}コンパイラは別のリテラルとして理解しているようです:

この機能はモジュールによって実装されていませんか、それとも単にこの機能が基本的な正規表現アルゴリズムでサポートされていないためですか?