Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 名称模式正则表达式_Java_Regex - Fatal编程技术网

Java 名称模式正则表达式

Java 名称模式正则表达式,java,regex,Java,Regex,我想为我用于验证目的的名称获取一个正则表达式模式。我现在使用的模式有一些问题。问题是如果我只给出一个名称,比如 jack morrison paul 需要付出,但如果我付出 jack paul 我给jack和双空格,paul不取。jack是名字morrison是中间名paul是姓氏。如果我给名字和姓氏,如果我不给中间名,则在验证时取双空格。我认为我的正则表达式有一些问题,所以请帮我解决这个问题。我是新手 // regex pattern ^([A-Za-z]([A-Za-z

我想为我用于验证目的的名称获取一个正则表达式模式。我现在使用的模式有一些问题。问题是如果我只给出一个名称,比如

jack morrison paul
需要付出,但如果我付出

jack  paul
我给jack和双空格,paul不取。jack是名字morrison是中间名paul是姓氏。如果我给名字和姓氏,如果我不给中间名,则在验证时取双空格。我认为我的正则表达式有一些问题,所以请帮我解决这个问题。我是新手

 //  regex pattern     
 ^([A-Za-z]([A-Za-z](\\s|\\.|_)*?)+[a-zA-Z]*$

请把你的问题编排得更好。我读了很多遍才明白你想要达到的目的

我的第一次尝试:

^([\w]+)\s+([\s\w]+)\s+([\w]+)$
它将分为名字、中间名和姓氏。

这个怎么样:

^(\w+)\s+(?:(\w+)\s+){0,1}(\w+){0,1}$
我只使用了
\w
,简化了名称捕获,这将不仅仅匹配字母,但您可以根据更具体的要求更改它

中间:
(?:(\w+\s+{0,1}
表示我们将查找一个或多个单词字符,以及一个或多个空格,作为一个0到1次的组,这意味着它是可选的

但我认为,抛出的部分只是使用了单个
\s
,这意味着它必须正好是一个空格。我使用了
\s+
表示至少一个空格,但可能更多。如果愿意,可以将其更改为更具限制性,例如:
\s{1,2}
表示介于1和两个空格之间


希望有帮助

José、Bjørn、Noël等都是无效的名字吗?@arkku:按照我的要求,我在做什么。人们是否有不同的名字模式或规则,我现在最不在乎了。我的客户需要这个,所以我需要给出这个pattern@Bart好球
unichars-a'\pL'[^a-zA-Z]'wc-lˋ==12917
。那只是其中的一小部分,嗯?!基本上,每次你看到有人写
A-Z
,几乎可以肯定他们做错了什么。
{0,1}
可以被
替换。(如果我没弄错的话)你是对的,OP看起来像个乞丐,所以我觉得我用的例子更容易理解。它真的很好,但对我不起作用。两个名字之间的两个空格没有得到验证。当你说“验证”时,你是什么意思?您是说您的测试用例不匹配吗?验证是在servlet中完成的,我正在使用regex进行名称验证。如果我确实给出了中间名,那么会显示错误消息,这是我不想要的。即使我们不给出中间名,也应该考虑Java有一个20世纪60年代的想法,即
\w
\s
,所以这是行不通的。其他语言没有被破坏,这可能就是你忘记的原因。您必须使用属性。