正则表达式,用于匹配特定的大小写模式

时间:2019-05-23 10:06:45

标签: java regex regex-lookarounds regex-group regex-greedy

我需要使用正则表达式模式检查输入字符串的正确性,每个单词都应以大写字母开头,最后也可以用“-”分隔表达式。 字符串至少应包含两个单词或带破折号的表达式。

例如

正确:

  • Apple Banana Couonut日期

  • 苹果香蕉

  • 香蕉Couonut日期

  • 花生酱日期

不正确:

  • 苹果

  • Apple Banana Couonut日期

  • BanAna couonut-Dates

Pattern pattern = Pattern.compile("([A-Z][a-z]++ )*([A-Z][a-z]++-[A-Z][a-z]++)");
pattern.matcher("Apple Banana Couonut-Dates").matches();

对于输入“ Apple Banana Couonut-Dates”,我的表达式返回false

1 个答案:

答案 0 :(得分:2)

要使至少2个大写单词与一个可选部分匹配,该可选部分的末尾用-分隔表达式,或者用-分隔一个表达式,您可以使用:

^(?:[A-Z][a-z]+(?: [A-Z][a-z]+\b(?!-))+(?: [A-Z][a-z]+-[A-Z][a-z]+)?|(?:[A-Z][a-z]+ )?[A-Z][a-z]+-[A-Z][a-z]+)$
  • ^字符串的开头
  • (?:非捕获组
    • [A-Z][a-z]+匹配大写单词
    • (?: [A-Z][a-z]+\b(?!-))+重复1次以上大写单词,断言右边不是-
    • (?: [A-Z][a-z]+-[A-Z][a-z]+)?可选部分,匹配空间和大写单词-大写单词
    • |
    • (?:[A-Z][a-z]+ )?将可选的大写单词与空格匹配
    • [A-Z][a-z]+-[A-Z][a-z]+
  • )$字符串结尾

Regex demo

请注意,使用Java可以使转义符两次转义。