0

文字列に文字が含まれているかどうかを確認しようとしましたが、「\」と「^」は許可されていません。

Regex nameValidator = new Regex("^[\\^]+$"); 

これは機能しません:

!nameValidator.IsMatch(myString)

なんで?

4

3 に答える 3

1

^ 文字クラスの内側と外側では意味が異なるためです。クラス文字の否定を意味します。したがって、私の正規表現は、\および以外のすべてを許可します^

Regex nameValidator = new Regex(@"^[^^\\]+$");
于 2013-03-08T10:05:37.177 に答える
0

この方法を試してください:

Regex nameValidator = new Regex(@"^[^\^\\]+$");

string sample_text = "hello world";
bool isMatch = nameValidator.IsMatch(sample_text); // true

sample_text = @"Hello ^  \world ";
isMatch = nameValidator.IsMatch(sample_text); // false
于 2013-03-08T10:05:39.423 に答える
0

\ は、C# の文字列リテラルのバックスラッシュをエスケープします。したがって、あなたの正規表現(正規表現エンジニアが見るように)は

^[\^]+$

これは有効ですが、あなたが望んでいたものではありません。(cared はバックスラッシュでエスケープされます) 次のように変更します。

new Regex("[\\\\\\^]+");

または、文字列リテラルの前に @ を使用します (推奨)

new Regex(@"[\\\^]+"); 

バックスラッシュとキャレットの両方をエスケープする必要があるため、バックスラッシュを 3 つ使用します。@ なしで文字列リテラルで使用するには、すべてのバックスラッシュを再度エスケープする必要があるため、6 つになります。

于 2013-03-08T10:05:57.673 に答える