Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.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,我得到一个字符串(名称),它应该检查以下内容: 2到30个字符之间 名称只能包含字母和空格 每个作品的第一个字符应该是大写 用空格隔开的每个单词 名称不能以空格开头或结尾 不允许使用特殊字符 这是我的正则表达式字符串:“[[[A-Z]{1}[A-zA-Z]*[\\s]?+]{2,30}[^\\s]” “罗杰·费德勒”应该是有效的,这说明它是有效的 “罗杰·费德勒”应该是无效的,但我的说法是有效的 “罗杰·费德勒美元”不应该是有效的,但我的说法是有效的 我很好奇,如果我执行这些错误,我对reg

我得到一个字符串(名称),它应该检查以下内容:

  • 2到30个字符之间
  • 名称只能包含字母和空格
  • 每个作品的第一个字符应该是大写
  • 用空格隔开的每个单词
  • 名称不能以空格开头或结尾
  • 不允许使用特殊字符
这是我的正则表达式字符串:
“[[[A-Z]{1}[A-zA-Z]*[\\s]?+]{2,30}[^\\s]”

“罗杰·费德勒”应该是有效的,这说明它是有效的 “罗杰·费德勒”应该是无效的,但我的说法是有效的 “罗杰·费德勒美元”不应该是有效的,但我的说法是有效的

我很好奇,如果我执行这些错误,我对regex非常陌生,你可以使用它

^(?=.{2,30}$)\p{Lu}\p{L}*(?:\s\p{Lu}\p{L}*)*$
如果要允许单词之间有一个或多个空格,请在
\s
之后添加
+

在Java中,regex声明如下所示

s.matches((?=.{2,30}$)\\p{Lu}\\p{L}*(?:\\s\\p{Lu}\\p{L}*))
模式匹配

  • ^
    -(隐式在
    匹配中)
    )-字符串的开头
  • (?=.{2,30}$)
    -整个字符串需要两到三十个字符
  • \p{Lu}\p{L}*
    -大写字母后跟零个或多个字母
  • (?:\s\p{Lu}\p{L}*)*
    -零个或多个出现的空格,然后是大写字母,然后是零个或多个字母
  • $
    -(隐式在
    匹配中)
    )-字符串结尾

如果您只想匹配ASCII字母,请将
\p{Lu}
替换为
[A-Z]
,将
\p{L}
替换为
[A-Za-Z]
匹配((?=.{2,30}$)\\p{Lu}\\p{L}*(?:\\s\\p{Lu L}\\p}*)
为什么它必须全部在一个正则表达式中?是的