REGEX - 在组合语句中嵌套量词

时间:2012-12-20 14:22:26

标签: regex

希伯来语中的姓氏可以是英文格式,只是字母的常规组合,如“史密斯”,“阵营”,“杰克”等,或两个单词的组合,其中包含空格中间,如“Ben David”,“Bar Yohay”,“Yom Tov”。我试图创建一个正则表达式,允许第一种格式 - 至少两个字母长的姓氏,或第二种格式 - 由两个单词组成的姓氏,每个字母长两个或多个字母,空格中间。这就是我想出的:

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

(我知道它不允许大写字母) 由于某种原因,它确实允许第一种格式的名称,如Smith和Jerry,但不允许第二种格式的名称。中间的空间格式有问题吗?对于regexp专业人员来说,这应该是一个简单的方法。提前谢谢:)

2 个答案:

答案 0 :(得分:2)

您可以将正则表达式简化为

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

答案 1 :(得分:1)

您滥用锚点(^$)。它们分别匹配字符串的开头和结尾。你真正想要的是:

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

此外,您可以将表达简化为:

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

除非您特别需要捕获群组。

或(所以你只需要一对锚):

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

(?:...)是一个非捕获组,是限制更改范围所必需的。