正则表达式模式 - Groovy

时间:2018-03-08 09:35:36

标签: regex groovy

我需要创建一个正则表达式 - 具有以下要求

以C,D,F,G,I,M或P开头 至少有一个下划线(_)

例如。 C6352_3

我已经尝试了以下这样的

@Pattern(regexp = '^(\C|\D|\F|\G|\I\|\M|\P)+\_*' , message = "error")

2 个答案:

答案 0 :(得分:1)

您可以使用

/^[CDFGIMP][^_\s]*_\S*$/

或者,只处理字符(字母,数字和_),

/^[CDFGIMP]\w*_\w*$/

或者更有效的字符类减法:

/^[CDFGIMP][\w&&[^_]]*_\w*$/

请参阅regex demo

<强>详情

  • ^ - 字符串的开头
  • [CDFGIMP] - 字符集中列出的任何字符
  • [^_\s]* - 除_和空格
  • 以外的零个或多个字符
  • \w* - 匹配0+字词:字母,数字或_[\w&&[^_]]*仅匹配0 +字母和数字)
  • _ - 下划线
  • \S* - 0 +非空白字符(或\w*将匹配任何字母,数字或_
  • $ - 字符串结尾(或者更好,\z仅匹配字符串的最后一步)。

答案 1 :(得分:1)

您可以跳过正则表达式,并使其可读:

boolean valid(String value) {
   (value?.take(1) in ['C', 'D', 'F', 'G', 'I', 'M', 'P']) && value?.contains('_')
}