1

ヘブライ語の姓は、「Smith」、「Camp」、「Jack」などの通常の文字の組み合わせである英語形式、または次のように中間にスペースを入れた 2 つの単語の組み合わせのいずれかです。 「ベン・デヴィッド」、「バー・ヨヘイ」、「ヨム・トヴ」。最初の形式 (少なくとも 2 文字の長さの姓) または 2 番目の形式 (それぞれ 2 文字以上の長さの 2 つの単語で構成され、スペースが含まれる姓) のいずれかを許可する正規表現を作成しようとしました。真ん中。これが私が思いついたものです:

(^[az]{2,}$)|((^[az]{2,}$)(^[ ]$)(^[az]{2,}$))

(大文字が許可されていないことはわかっています) 何らかの理由で、Smith や Jerry のような最初の形式の名前は許可されますが、2 番目の形式の名前は許可されません。真ん中のスペースのフォーマットに問題がありますか? これは、正規表現の専門家にとっては簡単なはずです。前もって感謝します :)

4

2 に答える 2

2

正規表現を次のように単純化できます

^[a-z]{2,}(?: [a-z]{2,})?$
于 2012-12-20T14:29:02.880 に答える
1

アンカー (^および$) を誤用しています。これらは、それぞれ文字列の先頭と末尾に一致します。あなたが実際に欲しいのは:

(^[a-z]{2,}$)|(^([a-z]{2,})([ ])([a-z]{2,})$)

さらに、式を次のように単純化できます。

^[a-z]{2,}$|^[a-z]{2,} [a-z]{2,}$

特にグループをキャプチャする必要がない限り。

または(したがって、アンカーのペアが1つだけ必要です):

^(?:[a-z]{2,}|[a-z]{2,} [a-z]{2,})$

(?:...)代替の範囲を制限するために必要な非キャプチャ グループです。

于 2012-12-20T14:24:43.673 に答える