0

数字で始まり、04数字のみを含むすべての文字列を一致させるために、次のように機能しますか?

Regex.IsMatch(str, "^04[0-9]+$")

または、別のブラケットのセットが必要ですか?

Regex.IsMatch(str, "^04([0-9])+$")
4

2 に答える 2

3

Regex

[character_group] の任意の 1 文字に一致しcharacter_groupます。

\d 任意の 10 進数に一致します。

+ 前の要素に 1 回以上一致します。

(subexpression) 一致した部分式をキャプチャし、序数を割り当てます。

^ 一致は、文字列または行の先頭から開始する必要があります。

$ 一致は、文字列\nの末尾か、行または文字列の末尾の前で発生する必要があります。

このコードが役立つように:

Regex.IsMatch(str, "^04\d+$")

すべてのコードが正しく動作します。

于 2012-11-08T05:34:11.027 に答える
1

最初の正規表現は正しいですが、2 番目の正規表現は正しくありません。最初の正規表現と同じものに一致しますが、その過程で多くの不必要な作業を行います。見てみな:

Regex.IsMatch("04123", @"^04([0-9])+$")

この例では、1はグループ #1 でキャプチャされ、 によって上書きされるだけ2です3。量指定子をキャプチャ グループに追加することは、ほとんど良い考えではありません。詳細な説明については、こちらをお読みください。

しかし、おそらくそれはあなたが求めている優先ルールです。量指定子は連結よりも優先度が高いため、文字クラスを括弧で分離する必要はありません (そうしている場合)。

于 2012-11-08T07:02:35.647 に答える