我需要创建一个正则表达式 - 具有以下要求
以C,D,F,G,I,M或P开头 至少有一个下划线(_)
例如。 C6352_3
我已经尝试了以下这样的
@Pattern(regexp = '^(\C|\D|\F|\G|\I\|\M|\P)+\_*' , message = "error")
答案 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('_')
}