正则表达式:匹配可选字符,但如果存在,则匹配第一个

时间:2013-05-27 06:06:46

标签: regex perl

我必须匹配

Salutation(optional) FirstName LastName

我的正则表达式是:

^(([mMrRsSdDlLtTcCoO]{2,4})\.?\s+)?([a-zA-Z,.'-]{2,}\s+)([a-zA-Z,.'-]{2,})$

我的正则表达式的问题是它可以正常使用

MRS。 Pamela Anderson Pamela Anderson

以及 Miss Pamela (错误的情况)。

2 个答案:

答案 0 :(得分:3)

您的正则表达式将Miss与FirstName匹配,Pamela作为姓氏

你的正则表达式应该是

^(?!(Mr|Miss|..)[.]?\s+[a-zA-Z,.'-]+$)[a-zA-Z,.'-]+[.]?(\s+[a-zA-Z,.'-]){1,2}$
 -------------------------------------
         |
         |->don't match further if it has Salutation and firstname or lastname

作为附注,不要使用[mMrRsSdDlLtTcCoO]{2,4}可以有许多有效名称的排列,例如coco(我的朋友的名字),Rod

使用|

(Mr|Mrs|Miss|Dr)明确指定

答案 1 :(得分:0)

试试这个:

(?:^[mMrRsSdDlLtTcCoO]{2,4}\.?\s+?)?([\w,.'-]{2,})\s+([\w,.'-]{2,})