4

次の正規表現でいくつかのC#コードを継承しました

Regex(@"^[a-zA-Z''-'\s]{1,40}$")

一重引用符の役割を除いて、この文字列を理解しています。いろいろ調べてみましたが、説明が見つからないようです。何か案は?

4

4 に答える 4

5

私の知る限り、表現は冗長です。

これは、a-zまたはA-Z、または'文字、またはとの間の任意のものに一致'します'(もちろん、これは'再び文字のみ、または任意の空白です。

RegexPalを使用してこれをテストしましたが、これらの文字以外には一致しないようです。おそらく、シーケンスはコードによって生成されたのでしょうか、それとも以前のバージョンではより広い範囲の文字と一致するために使用されていたのでしょうか。

更新:あなたのコメント(名前と一致する)から、私は先に進んで、著者がハイフンを引用符で囲んでエスケープしていると思ったと思います。そして、最も優れたソフトウェアテスターではありませんでした。彼らがおそらく意味したのは:

Regex(@"^[a-zA-Z'\-\s]{1,40}$") //Escaped the hyphen

これは次のように書くこともできます:

Regex(@"^[a-zA-Z'\s-]{1,40}$") //Put the hyphen at the end where it's not ambiguous
于 2012-08-07T21:34:25.797 に答える
1

アポストロフィ/一重引用符を3回使用する唯一の方法は、2番目と3番目のインスタンスが実際には'、'、および‛などの派手な中の一重引用符である場合です。もしそうなら、それを表現するためのより良い(より明確な)方法は、ユニコードエスケープを使用することです:

Regex(@"^[a-zA-Z'\u2018-\u201B\s]{1,40}$") 

ちなみに、PowerShellなどの一部の言語では、これらのカーリー一重引用符を明示的に許可し、ASCII'(0x27)文字と同じように扱います。PowerShell 2.0言語仕様から:

一重引用符:

' (U+0027) 
Left single quotation mark (U+2018) 
Right single quotation mark (U+2019) 
Single low-9 quotation mark (U+201A) 
Single high-reversed-9 quotation mark (U+201B)
于 2012-08-07T21:45:42.253 に答える
1

3つの一重引用符は冗長です。これらは、一重引用符(#1)と、一重引用符(ハイフンで区切られた#2と#3)で開始および終了する文字の範囲を表します。

エラーのようです。ライターは、ハイフン文字を一重引用符で「エスケープ」することにより、クラスにハイフン文字を含めることを意図していたようです。エスケープせずに、ハイフンはazやAZのように文字範囲を表します。

原作者は[a-zA-Z'\-\s]を意味していると思います

于 2012-08-07T21:52:55.327 に答える
1

余分なアポストロフィは冗長であるため、あまり意味がありません。1つの可能性は、作成者がダッシュをエスケープしてパターンに含めようとしたことですが、それを行う正しい方法は、バックスラッシュを使用することです。

Regex(@"^[a-zA-Z'\-\s]{1,40}$")

(リテラルの前後にアポストロフィを使用することは、たとえば、作成者がそれを選択した可能性のあるカスタム形式の文字列で使用されます。)

于 2012-08-07T21:53:24.677 に答える