需要正则表达式帮助以匹配名称

时间:2019-09-09 13:39:11

标签: regex

假设我有这三个名字

John Doe (p45643)
Le'anne Frank
Molly-Mae Edwards

我想比赛 1)约翰·杜 2)Le'anne弗兰克 3)莫莉·梅·爱德华兹

我尝试过的正则表达式是

(^[a-zA-Z-'^\d]$)+

但是它没有按我期望的那样工作。

我想帮助创建一个正则表达式模式,

从头到尾匹配一个名称,并且不能包含数字。每个“名称”可以包含的唯一允许值为[a-zA-Z'-],因此,如果名称为 J0hn则不匹配

3 个答案:

答案 0 :(得分:1)

如果我正确理解了您的问题,则您的正则表达式中有一个小错误:

(^[a-zA-Z-'^\d]$)+
         ^-------^------Here

上面指出的-应该作为范围字符而转义或移至末尾。 +将该群组标记为重复。

您可以改用此正则表达式(遵循以前的模式):

(^[a-zA-Z'^\d -]+$)

Regex demo

更新:发表评论。如果要单独匹配,则可以使用:

(\b[a-zA-Z'^\d-]+\b)

Regex demo

如果只想匹配字符串(而不是数字),则可以使用:

(\b[a-zA-Z'-]+\b)

Regex demo

答案 1 :(得分:0)

您使用的锚点不正确。基于修饰符,它可以匹配整个字符串或一行。 试试

/^[a-zA-Z'-]+$/

答案 2 :(得分:0)

感谢@Djory Krache

我正在寻找的查询是

(\b[a-zA-Z'-]+\b)