問題タブ [regex-alternation]

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 に答える
318 参照

javascript - 最初の一致の変更されたバージョンを 1 つの式のみと一致させますか?

私は Alex Gorbatchev の Syntax Highlighter のブラシを書いて、Smalltalk コードのハイライトを取得しています。ここで、次の Smalltalk コードを検討してください。

ブロック引数 ":each" を見つけて、その後発生するたびに "each" と一致させたい (簡単にするために、括弧内だけでなく、すべての発生としましょう)。引数には、":myArg" など、任意の名前を付けることができることに注意してください。

「:each」に一致する私の試み:

これはうまくいくようです。問題は、「each」の出現を一致させることです。私はこのようなものがうまくいくと思った:

しかし、交互の右辺は独立した式として扱われているようで、後方参照は機能しません。

単一の式で私が望むことを達成することさえ可能ですか? それとも、(別の関数呼び出しを介して) 2 番目の式内で後方参照を使用する必要がありますか?

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

java - Java 正規表現代替演算子「|」動作が壊れているようです

ローマ数字の正規表現マッチャーを作成しようとしています。sed (正規表現の「標準」と見なされると思いますか?) では、代替演算子で区切られた複数のオプションがある場合、最も長く一致します。つまり、"I|II|III|IV"「IV」は「IV」、「III」は「III」に一致します。

Java では、同じパターンが「IV」の場合は「I」に、「III」の場合は「I」に一致します。Java は、左から右への交互一致のいずれかを選択することが判明しました。つまり、正規表現では「I」が「III」の前にあるため、一致します。正規表現を に変更する"IV|III|II|I"と、動作は修正されますが、これは明らかに一般的な解決策ではありません。

「最初」を選択する代わりに、代替グループからJavaに最長一致を選択させる方法はありますか?

わかりやすくするためのコード サンプル:

これは出力します"six"

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

php - 交替内の混乱

正規表現内で、代替からの1つの代替に一致する場合、さらに代替が残っていても、そこで停止すると仮定します(代替の外側の正規表現には他のトークンはありません)。

ソース

1 つのダブル ワードを検索するこのパターン (例: this this)

この主題を紹介すると、1 つの混乱があります。

パタンと一致します。

\b([a-z]+) マッチ

((?:<[^>]+>|\s)+)1 つの TAG に続くので、2 番目の代替一致。

(\1\b) 最初の括弧で後方参照された同じ単語が続く場合、一致する必要があります。

(\1\b)タグの後に「 」が続かず、空白が続く場合、なぜ一致するのですか。

交互に存在することを知っています\s

しかし、TAG マッチがオルタネーションを消費することは想定されていませんか?

\s代替案がまだ生きているのはなぜですか?

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

regex - 正規表現の代替部分でgrepを使用するには?

8 月または 9 月のすべての日付を grep したい (mm/dd/yyyy先行ゼロの日付形式)。

私は試した:

しかし、コマンドプロンプトの出力:

指定されたパスが見つかりません。

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

python - 複数の正規表現パターンを代替演算子と照合しますか?

Python Regex を使用して小さな問題に遭遇しました。

これが入力であるとします:

私が達成しようとしているのは、括弧の間にあるものを単一の一致として取得し、外側の文字を個別の一致として取得することです。望ましい結果は、次のようになります。

試合の順番は守らなければなりません。

Python 3.3 でこれを取得しようとしましたが、正しい正規表現を理解できないようです。これまでのところ、私は持っています:

print(matches)次の結果が得られます。

私が間違っていることはありますか?

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

regex - 文字クラスが交互よりも速いのはなぜですか?

次のような例では、文字クラスを使用する方が代替よりも高速であるように思われます:
[abc]vs(a|b|c)
推奨されていると聞いたことがありTime::HiResます。
また(?:a|b|c)、キャプチャ括弧が違いを生む場合に使用しても、結果は変わりません。
しかし、私はその理由を理解できません。バックトラックのせいだと思いますが、各位置で見ると3文字の比較があるので、バックトラックが交代にどのように影響するかはわかりません。それは実装の代替の性質の結果ですか?

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

c# - 異なる形式のオプション句による正規表現のトラブル

特定の値を解析したいファイルがあります。次の 3 つの正規表現をすべて組み合わせて、測定値があるかどうか、エラーがあるかどうか、および測定値とエラーがある場合はそれらを含めて、各テストのエントリの 1 つのグループを返すにはどうすればよいですか? 任意の数のテスト、任意の数の測定がテストに含まれる可能性がありますが、他の測定がないテストには 1 つのエラーがあります。さまざまな組み合わせを試しましたが、成功しませんでした。先読みと代替を使用する必要があると思いますが、適切な組み合わせが見つかりません。参考までに、正規表現はデータベースに格納され、C# アプリケーションで使用されます。前もって感謝します!

入力ファイル:

テスト部分を解析するために、正規表現を使用しています。

測定データを解析するには、次の正規表現を使用します。

エラーを解析するには、次の正規表現を使用します。

免責事項: はい、入力が XML であることはわかっていますが、アプリケーションをデシリアライズするように変更することはできません。正規表現を使用しています。

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

regex - 正規表現代替順序

テキストのページからデータを抽出するために複雑な正規表現を設定しました。何らかの理由で、交互の順序が期待どおりではありません。簡単な例は次のとおりです。

簡単に言えば、フロア番号、既知の名前の付いたフロアを取得しようとしており、バックアップとして、後で確認する場合に備えて、1 ~ 3 個の不明な単語とフロアをキャプチャします (実際にはグループ名を使用してこれを識別します)。しかし、問題を混乱させたくありませんでした)

問題は、文字列が

3番目のオルタネーションと一致していることを示しているように見えます13th Flooron the 13th Floor13階に合うと思っていたのに。私はこれを具体的に (または私が考えたように) マッチのタイプに優先順位を付け、他のマッチが見逃された場合にのみあいまいなものを最後に残すように設定しました。正規表現が貪欲であると言ったとき、彼らは冗談ではなかったと思いますが、これを「貪欲」に設定して、私が望むように動作させる方法がわかりません。