2016-05-16 57 views
3

這裏有一個龐大的全名列表,我只需要過濾那些名字長於3個字母字符且姓氏長於7個字母字符的名字。全名應該只包含1個名字和1個姓氏,由一個空格分隔。名字和姓氏都不允許使用特殊字符。全名的總長度不得超過26個字符。單一正則表達式 - 只匹配精確定義的名稱

我不知道如何結合條件,就好像我把量詞放在括號後面一樣,它不會比較全名的長度,而是比較正則表達式匹配輸入文本的次數。

(([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}'使'regex'有效和便攜。或者「{11,26}」更好地匹配組件的最小長度和它們之間的空白區域。 – axiac

0

試試這個正則表達式:

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

它採用了零長度先行斷言,以滿足邏輯條件(3+第一,一個空格,最後7+,無非字母),和量化'任何'到消耗適當數量的字符。

regex demo here