2016-05-16 2 views
3

フルネームの巨大なリストがあり、最初の名前がアルファベット3文字より長く、姓がアルファベット7文字より長い名前だけをフィルタリングする必要があります。フルネームは、1つのスペースで区切られた1つのファーストネームと1つの姓のみを含む必要があります。名前にも姓にも特殊文字は使用できません。フルネームの全長は、26文字を超えてはいけません。1つの正規表現 - 正確に定義された名前のみと一致する

私は量子を括弧の後に置くかのように条件をどのように組み合わせるか分かりませんが、正規表現が入力テキストと一致した回数の代わりに完全名の長さを比較することはありません。

(([A-Za-z]{3,} [A-Za-z]{7,}){26} 

これは確かに複数の正規表現で行うことができます。難しい部分は、代わりに必要な単一の正規表現を作成することです。

答えて

0

あなたが先読み使用できる:

(?=^.{1,26}$)([A-Za-z]{3,} [A-Za-z]{7,}) 

の最初の部分は第二の名前に一致するルールであり、長さは0から26までであることをアサートします。

+0

どのような 'regex'エンジンを使用しますか?どうやら '{、26}'は[Perl](http://perldoc.perl.org/perlre.html#Regular-Expressions)や[PHP](http://php.net/manual /en/regexp.reference.repetition.php)。 Perlのドキュメントは、構文が将来有効になることを示唆しています。しかし、正規表現を有効かつ移植性のあるものにするために '{1,26}'を置いています。または、コンポーネントの最小長とそれらの間の空白をより良く一致させる '{11,26} '。 – axiac

0

この正規表現を試してみてください。

(?=^[a-z]{3,}\s[a-z]{7,}$)(.*){1,27} //global,case-insensitive 

それは論理条件(3+まず、スペース、7+文字が、最後、何も)、およびAを満たすように長さゼロの先読みアサーションを使用しています何かを数値化しての適切な文字数を消費します。

regex demo here

関連する問題