正規表現の問題があります。数字「41」だけを無視しようとしています。4、1、14 などをすべて一致させたいのです。
これ[^\b41\b]
は事実上私が望むものですが、これは値 1 と 4 のすべての単一反復も無視します。
例として、これは「41」に一致しますが、一致しないようにしたい: \b41\b
正規表現の問題があります。数字「41」だけを無視しようとしています。4、1、14 などをすべて一致させたいのです。
これ[^\b41\b]
は事実上私が望むものですが、これは値 1 と 4 のすべての単一反復も無視します。
例として、これは「41」に一致しますが、一致しないようにしたい: \b41\b
次のようなものを試してください:
\b(?!41\b)(\d+)
(?!...)
コンストラクトは否定先読みであるため、これは次のことを意味します。「41」が続かない単語境界を見つけ、その後の一連の数字をキャプチャします。
これは、「特定の文字列を含まない正規表現」という質問に似ているため、そこから回答を繰り返します。
^((?!41).)*$
これは、41だけでなく、任意の文字列に対しても機能します。説明については、私の応答を参照してください。
除外するために否定的な先読みアサーション41
を使用できます。
/\b(?!41\b)\d+\b/
この正規表現は次のように解釈されます: 任意の単語境界で、その後に( )\b
が続かない場合、単語境界が続く 1 つ以上の数字に一致します。41\b
(?!41\b)
または、否定的な後読みアサーションでも同じです:
/\b\d+\b(?<!\b41)/
この正規表現は次のように解釈されます: 単語境界で囲まれた 1 つ以上の数字に一致しますが、一致の最後の部分文字列の前に\b41
( (?<!\b41)
) が付いていない場合に限ります。
または、基本的な構文だけを使用することもできます。
/\b(\d|[0-35-9]\d|\d[02-9]|\d{3,})\b/
これは、次のいずれかの単語境界で囲まれた一連の数字のみに一致します。
4
最初の位置に a がない、または1
2 番目の位置にa がない 2 つの数字