4

正規表現の問題があります。数字「41」だけを無視しようとしています。4、1、14 などをすべて一致させたいのです。

これ[^\b41\b]は事実上私が望むものですが、これは値 1 と 4 のすべての単一反復も無視します。

例として、これは「41」に一致しますが、一致しないようにしたい: \b41\b

4

3 に答える 3

5

次のようなものを試してください:

\b(?!41\b)(\d+)

(?!...)コンストラクトは否定先読みであるため、これは次のことを意味します。「41」が続かない単語境界を見つけ、その後一連の数字をキャプチャします。

于 2010-03-25T14:31:17.153 に答える
1

これは、「特定の文字列を含まない正規表現」という質問に似ているため、そこから回答を繰り返します。

^((?!41).)*$

これは、41だけでなく、任意の文字列に対しても機能します。説明については、私の応答を参照してください。

于 2010-03-25T15:04:46.977 に答える
1

除外するために否定的な先読みアサーション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 がない、または12 番目の位置にa がない 2 つの数字
  • 3桁以上
于 2010-03-25T14:32:20.613 に答える