0

C#に移行する必要がある正規表現があります。このようなエラーが発生します

Unrecognized escape sequence    

私はRegex.Escapeを使用していますが、明らかに間違っています。

string pattern = Regex.Escape("^.*(?=.{7,})(?=.*[a-zA-Z])(?=.*(\d|[!@#$%\?\(\)\*\&\^\-\+\=_])).*$");
hiddenRegex.Attributes.Add("value", pattern);

これはどのように正しく行われますか?

4

2 に答える 2

4

発生しているエラーはコンパイル時に発生しますか?つまり、C#コンパイラは文字列を理解できません。文字列の前に@記号を付けると、問題ないはずです。Regex.Escapeは必要ありません。

C#の文字列の前にある@は何ですか?を参照してください。

var pattern = new Regex(@"^.*(?=.{7,})(?=.*[a-zA-Z])(?=.*(\d|[!@#$%\?\(\)\*\&\^\-\+\=_])).*$");
pattern.IsMatch("Your input string to test the pattern against");
于 2012-05-02T16:40:17.507 に答える
0

発生するエラーは、文字列に無効なエスケープシーケンスが含まれていることが原因です(例\d)。これを修正するには、バックスラッシュを手動でエスケープするか、代わりに逐語的な文字列リテラルを記述します。

string pattern = @"^.*(?=.{7,})(?=.*[a-zA-Z])(?=.*(\d|[!@#$%\?\(\)\*\&\^\-\+\=_])).*$";

Regex.Escape固定正規表現を作成する場合ではなく、動的コンテンツを正規表現に埋め込む場合に使用されます。たとえば、ここで使用します。

string name = "this comes from user input";
string pattern = string.Format("^{0}$", Regex.Escape(name));

これを行うnameのは、ドットや括弧など、正規表現に特別な意味を持つ文字を含めることができるためです。がハードコーディングされている場合name(例のように)、これらの文字を手動でエスケープできます。

于 2012-05-02T16:43:11.277 に答える