首页 > 解决方案 > 仅使用正则表达式匹配大小写字母

问题描述

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

这是我的正则表达式字符串:"[[[A-Z]{1}[a-zA-Z]*[\\s]?+]{2,30}[^\\s]"

“Roger Federer”应该是有效的,这说它是“Roger Federer”不应该是有效的,但我说它是“Roger Federer $”应该是无效的,但我说它是

我很好奇我是否执行了这些错误,我对正则表达式很陌生

标签: javaregex

解决方案


您可以使用

^(?=.{2,30}$)\p{Lu}\p{L}*(?:\s\p{Lu}\p{L}*)*$

如果您想在单词之间允许一个或多个+空格,请添加after \s

请参阅正则表达式演示

在 Java 中,正则表达式声明看起来像

s.matches("(?=.{2,30}$)\\p{Lu}\\p{L}*(?:\\s\\p{Lu}\\p{L}*)*")

模式匹配

  • ^- (隐含在matches) - 字符串的开头
  • (?=.{2,30}$)- 整个字符串需要 2 到 30 个字符
  • \p{Lu}\p{L}*- 一个大写字母后跟零个或多个字母
  • (?:\s\p{Lu}\p{L}*)*- 零个或多个空格,然后是大写字母,然后是零个或多个字母
  • $- (隐含在matches) - 字符串结束。

如果您只想匹配 ASCII 字母,请替换\p{Lu}[A-Z]和。\p{L}[A-Za-z]


推荐阅读