正規表現は23桁の文字列内に含まれる場合一致を無視します

正規表現は23桁の文字列内に含まれる場合一致を無視します

状況に対する解決策が思いつかないので、特定の数字シーケンスに一致する正規表現を使用します。

(102030)\d{10}

これをテストデータとして使用すると、次の一致が得られます。

75277887243040354513001
55345377243014107206375
810203087654135168       <- Match
1102030698798798477      <- Match
71020307248040361799581  <- Match

私がやろうとしているのは、文字列に 23 桁の数字がある場合を無視することですが、正規表現のみを使用してそれは可能ですか? 否定の先読みを試しましたが、実現できませんでした。

答え1

先を見据えるには、その前に何かが必要です。まずは

\d

次に、次の 22 桁の前に負の数を付けます。

(?!\d{22})

23桁の行をすべて除外します。その後、元の文字列が続きます

(102030)\d{10}

完全な正規表現は次のようになります

\d(?!\d{22})(102030)\d{10}

結果はこちらregex101.com:

ここに画像の説明を入力してください

答え2

\b(?!\d{23}\b)\d*((102030)\d{10})\d*\b

これは、最初のサブグループ内の一致をキャプチャします。

関連情報