1

希伯来语中的姓氏可以是英文格式,它只是字母的常规组合,如“Smith”、“Camp”、“Jack”等,也可以是中间有空格的两个单词的组合,如“Ben David”、“Bar Yohay”、“Yom Tov”。我试图创建一个正则表达式,它允许第一种格式 - 至少两个字母长的姓氏,或第二种格式 - 由两个单词组成的姓氏,每个单词长两个或多个字母,中间有一个空格中间。这是我想出的:

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

(我知道它不允许使用大写字母)出于某种原因,它确实允许使用第一种格式的名称,例如 Smith 和 Jerry,但不允许使用第二种格式的名称。是不是中间空格的格式有问题?对于正则表达式专业人士来说,这应该是一件容易的事。提前致谢 :)

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,}$

除非您特别需要捕获组。

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

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

(?:...)是非捕获组,需要限制交替的范围。

于 2012-12-20T14:24:43.673 回答