0

私はこの正規表現を持っています

^(\\w|@|\\-| |\\[|\\]|\\.)+$

私はそれが何をするのか正確に理解しようとしていますが、結果が得られないようです...どこでも二重のバックスラッシュを理解できません...単一のバックスラッシュを取得するために二重のバックスラッシュを使用することは想定されていません?

この正規表現は、ユーザー名が奇妙な文字などを使用していないことを検証するためのものです。

誰かが私に二重のバックスラッシュのことを説明できるならお願いします。@_@

追加情報: Regex.IsMatch を使用して C# でこの正規表現を取得し、ユーザー名文字列が正規表現と一致するかどうかを確認しました。これは、ASP Web サイト用です。

4

5 に答える 5

5

\バックスラッシュはC#のエスケープ文字であるため、単にエスケープしているだけだと思います。

string pattern = "^(\\w|@|\\-| |\\[|\\]|\\.)+$";

そのままの文字列を使用して書き換えることができます

string pattern = @"^(\w|@|\-| |\[|\]|\.)+$";

これで、何が起こっているのかを理解するのが少し簡単になりました。1 回以上繰り返される任意の単語文字、アットマーク、ハイフン、スペース、角括弧、またはピリオドに一致します。^とはそれぞれ文字列の最初と$最後に一致するため、これらの文字のみが許可されます。

したがって、このパターンは次と同等です。

string pattern = @"^([\w@ \[\].-])+$";
于 2013-05-06T15:03:59.537 に答える
4
  1. ダブルスラッシュはシングルスラッシュであるはずです。スラッシュはC# 文字列コンテキストの他のエスケープ文字に使用されるため、二重スラッシュはスラッシュ自体をエスケープするために使用されます。たとえば\n、改行を表します。

  2. ダブルスラッシュを整理すると、^(\w|@|\-| |\[|\]|\.)+$

  3. |ORを意味するように、この正規表現を分解し、またはまたはまたは スペース またはまたはまたは\w|@|\-| |\[|\]|\.を意味します。つまり、任意の英数字、、、スペース、、および文字です。このスラッシュは、 、、および文字をエスケープするための正規表現エスケープであることに注意してください。これらはすべて、正規表現コンテキストで特別な意味を持つためです。\w@\-\[\]\.@-[].-[].

  4. そして、+前のトークン (すなわち\w|@|\-| |\[|\]|\.) が 1 回以上繰り返されることを意味します。

  5. したがって、全体とは、英数字、@-、スペース、[]および.文字の任意の組み合わせの 1 つまたは複数を意味します。

于 2013-05-06T15:06:01.367 に答える
2

正規表現を分析するためのオンライン ツールがあります。そのようなものはhttp://www.myezapp.com/apps/dev/regexp/show.wsにあります

報告する場所

Sequence: match all of the followings in order
    BeginOfLine
    Repeat
        CapturingGroup
            GroupNumber:1
            OR: match either of the followings
                WordCharacter
                @
                -
                [
                ]
                .
            one or more times
    EndOfLine

他の人が指摘したように、二重のバックスラッシュはバックスラッシュをエスケープするだけなので、正規表現を文字列に埋め込むことができます。たとえば、「\\w」はパーサーによって「\w」と解釈されます。

于 2013-05-06T15:08:09.787 に答える
1

^ は行頭を意味します。

括弧はグループ化に使用されます

\w は単語文字です

| | またはを意味します

@ @ 文字に一致

\- ハイフン文字に一致

[ と ] は角かっこに一致します

\. ピリオドに一致

+ は 1 つ以上を意味します

$ 行末。

したがって、正規表現は、単語文字、@、ハイフン、スペース、角かっこ、またはドットのみを含む文字列と一致させるために使用されます。

于 2013-05-06T15:09:14.467 に答える
1

意味は次のとおりです。

^(\\w|@|\\-| |\\[|\\]|\\.)+$

^- 正規表現が文字列の先頭から始まることを意味します。試合は文字列の途中から始めるべきではありません。

括弧内の個々の事柄は次のとおりです。

\\w- 「単語」文字を示します。通常、これは と表示されます\wが、これはエスケープされています。

@- @ 記号が許可されていることを示します

\\---が許可されていることを示します。ダッシュは正規表現で他の意味を持つ可能性があるため、これはエスケープされます。文字クラスではないので、技術的に必要だとは思いません。

- スペースを使用できます

\\[および\\]- [ および ] が許可されます。

\\.- ピリオドは有効な文字です。ピリオドは正規表現で特別な意味を持つため、エスケープされました。

現在、これらの文字はすべて|括弧内に区切り文字として含まれています - これは OR を意味します。したがって、これらの文字はどれも有効です。

+末尾のは、括弧内に記述されている 1 つ以上の文字が有効であることを意味します。は$、正規表現の末尾が文字列の末尾と一致する必要があることを意味します。

次のように文字列の前に付けるだけの場合、二重スラッシュは必要ないことに注意してください。

@"\w"と同じです"\\w"

于 2013-05-06T15:11:46.993 に答える