問題タブ [regex-lookarounds]
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.
java - Javaで文字列を2つの部分に分割する必要があります
連続した数字のチャンクと連続した文字のチャンクを含む文字列があります。それらを 2 つの部分 (1 つの整数部分と 1 つの文字列) に分割する必要があります。
を使ってみString.split("\\D", 1)
たのですが、最初の文字を食い尽くしています。すべての String API をチェックしましたが、適切なメソッドが見つかりませんでした。
これを行う方法はありますか?
regex - .php で終わるファイルの正規表現を作成するには?
.php で終わらないファイル名に一致する非常に単純な正規表現を作成しようとしています。私は次のことを思いつきました...
...しかし、これはすべてのファイル名に一致します。誰かが私を正しい方向に向けることができれば、私はとても感謝しています.
regex - 先読みの混乱
わかりました、正規表現クックブックからこの例を取得しました
上記の正規表現は、任意のパターンの長さを制限するために使用されます
「aaabbb」をもう一度テストすると、完全に失敗します
私が理解していることから、長さ3の任意の文字が先行する任意の文字を探します.SOは「bbb」と一致する必要がありますが、そうではありません
もう 1 つ質問があります。後読みはこのパターン x(?=x) に従う必要があります。
regex - a^nb^n をどのように一致させることができますか?
これは、一連の教育用正規表現記事の第 2 部です。先読みとネストされた参照を使用して、非正規言語 a n b nに一致させる方法を示しています。ネストされた参照が最初に導入されたのは、この正規表現は三角数をどのように見つけますか?
典型的な非正規言語の 1 つは次のとおりです。
L = { a
nb
n: n > 0 }
a
これは、いくつかの's とそれに続く同数の 's で構成されるすべての空でない文字列の言語ですb
。この言語の文字列の例はab
、、、aabb
ですaaabbb
。
この言語は、ポンピング補題によって非正則であることを示すことができます。それは実際、文脈自由文法によって生成できる原型的な文脈自由言語です。 S → aSb | ab
それにもかかわらず、現代の正規表現の実装は、通常の言語以上のものを明確に認識します。つまり、正式な言語理論の定義によると、それらは「規則的」ではありません。PCRE と Perl は再帰的な正規表現をサポートし、.NET はバランシング グループの定義をサポートします。後方参照マッチングなどの「派手な」機能でさえ、正規表現が規則的ではないことを意味します。
しかし、この「基本的な」機能はどれほど強力なのでしょうか? L
たとえば、Java 正規表現で認識できますか? ルックアラウンドとネストされた参照を組み合わせて、たとえば 、 、 などの文字列に一致するように機能するパターンを作成することはできますString.matches
か?ab
aabb
aaabbb
参考文献
- perlfaq6: Perl の正規表現を使用してバランスのとれたテキストに一致させることはできますか?
- MSDN - 正規表現言語要素 - グループ定義のバランス調整
- pcre.org - PCRE のマニュアルページ
- regular-expressions.info -ルックアラウンドとグループ化と後方参照
java.util.regex.Pattern
リンクされた質問
regex - 正規表現-先読みアサーション
先読みアサーション(?=)に問題があります。たとえば、次の式があります。
Win
式が、のようであれば、Win2000
一致しWin2000fgF
ます。次の表現があります:
数字と小文字に一致します。例:45dF
、4Dd
。しかし、なぜそれが機能し、すべての文字と一致するのかわかりません:)以前の文字はありません(?=.*\d)
。私は、この式だけが機能するはずだと思います:
(\*
式の前に)。
説明してもらえますか?
regex - 正規表現まで、ただし含まない
正規表現の場合、検索までの構文は何ですか? ちょっと好き:
regex - 先読みのある正規表現
この正規表現を機能させることができないようです。
入力は次のとおりです。実際には 1 行ですが、各 \r\n の後に改行を挿入して見やすくしたので、空白文字のチェックは必要ありません。
これは別の 01-31 と 02-01 に続き、別の新しい試合をマークします (これらは日付です)。
この入力に対して合計 2 つの一致が必要です。私の問題は、先を見越して新しい試合の開始 (次の 2 つの日付) を一致させる方法がわかりませんが、それらの日付を最初の試合に含めないことです。それらは 2 番目の一致に属している必要があります。
説明するのは難しいですが、誰かが私を理解してくれることを願っています。これは私がこれまでに得たものですが、それほど近いものではありません:
私が欲しい試合は次のとおりです。
その後、\r\n で列を簡単に区切ることができます。
regex - 正規表現の否定先読み
私は正規表現の体操をしています。私は、適切なスペース内でヌル チェックが続かない as-operator の使用がある C# コードを検索しようとするタスクを自分自身に設定しました。今は C# コードを解析したくありません。たとえば、次のようなコード スニペットをキャプチャしたい
ただし、キャプチャしない
それどころか
したがって、任意のランダムな null チェックは「適切なチェック」としてカウントされるため、検出されません。
問題は、周囲に何か他のものが見つからないようにしながら、どうすれば何かを一致させることができるかということです。
私は単純なアプローチを試み、「as」を探してから、150 文字以内で否定的な先読みを行いました。
上記の正規表現は、残念ながら上記の例のすべてに一致します。問題は、先読みしてから否定的な先読みを行うと、先読みで「== null」が見つからない多くの状況が見つかる可能性があることです。
式全体を否定しようとしても、それは役に立ちません。それは、ほとんどの C# コードと一致します。
java - 先読みが失敗した Java RegEx
Java では、正規表現を思いどおりに動作させることができませんでした。この問題を示すために、次の小さな JUnit テストを作成しました。
コメントでマークされた 2 行を除いて、すべての行が通過します。グループ化は、パターン文字列を除いて同一です。大文字と小文字を区別しない機能を追加するとマッチャーが壊れるのはなぜですか?
java - 否定先読み正規表現が機能しない
"caused"
要件:スラッシュの後に任意の数の大文字のアルファベットが続き、スペース + が続かない単語を見つけます"by/IN
。
上記の例では、 の"caused/VBN"
後に が続く" by/IN"
ため、「caused」は一致しません。
"by/IN"
原因に従わないので、一致するはずです
caused/[A-Z]+
-- 'caused' という単語 + / + 1 つ以上の大文字
(?![\\s]+by)
-- 否定先読み - スペースと by が一致しない
以下は、私がテストに使用した簡単な方法です
出力:caused/VB
負の先読み正規表現が機能しない理由がわかりません。