我对正则表达不太好,这是我的问题:
我想创建一个与两个或多个名字的名称相匹配的正则表达式(例如Francis Gabriel)。
我想出了正则表达式^[A-Z][a-z]{3,30}/s[A-Z][a-z]{3,30}
但是
它只匹配两个名字而不是所有名字。
正则表达式应与John John J. Johnny
匹配。
答案 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
测试代码:
String testInput = "John John P. Johnny";
if (testInput.matches("^\\w+\\s(\\w+\\s)+\\w+\\.\\s\\w+$")) {
System.out.println("We have a match");
}