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}*)
为什么它必须全部在一个正则表达式中?是的