正则表达式在中间首字母之前超过1个名字

时间:2017-02-10 07:46:23

标签: regex

我对正则表达不太好,这是我的问题:
我想创建一个与两个或多个名字的名称相匹配的正则表达式(例如Francis Gabriel)。

我想出了正则表达式^[A-Z][a-z]{3,30}/s[A-Z][a-z]{3,30}但是 它只匹配两个名字而不是所有名字。

正则表达式应与John John J. Johnny匹配。

3 个答案:

答案 0 :(得分:0)

试试这个:

^(\S*\s+)(\S*)?\s+\S*?

Francis Gabriel - 比赛:

0: [0,10] Francis 
1: [0,9] Francis 
2: [9,9] 

John John2 J. Johnny - 匹配:

0: [0,11] John John2 
1: [0,5] John 
2: [5,10] John2

答案 1 :(得分:0)

^[A-Z][a-z]{3,30}(\\s[A-Z](\\.|[a-z]{2,30})?)*$
使用Pattern Compiler时,必须在java中使用

\ s。 如果它是X.,我们必须验证它,或XYZ John Johny J.hny - >是错的 所以要么。或[a-z]并且至少应有一个名字。所以,在第二部分的最后添加*以匹配0或更多。

由于此代码段不支持java,因此您可以使用相同正则表达式的JavaScript实现来理解。

在这里查看



var reg=/^[A-Z][a-z]{3,30}(\s[A-Z](\.|[a-z]{2,30})?)*$/;
console.log(reg.test("John john")); // false because second part start with small case
console.log(reg.test("John John"));
console.log(reg.test("John John J."));
console.log(reg.test("John John J. Johny"));




答案 2 :(得分:0)

使用以下正则表达式:

^\w+\s(\w+\s)+\w\.\s\w+$

^\w+\s    match a name a space
(\w+\s)+  followed by at least one more name and space
\w+\.\s   followed by a single letter initial with dot then space
\w+$      followed by a last name

Regex101

测试代码:

String testInput = "John John P. Johnny";
if (testInput.matches("^\\w+\\s(\\w+\\s)+\\w+\\.\\s\\w+$")) {
    System.out.println("We have a match");
}