正则表达式包含A-Z 0-9和/或空格,括号或连字符

时间:2015-03-05 21:40:53

标签: java regex

如果它包含A-Z0-9,并且A-Z0-9在任何地方都有空格,在任何地方括号或在任何地方连字符,我试图让我的正则表达式评估为真。

到目前为止,我已经得到了这个匹配A-Z0-9()“”和连字符,但我想使括号/空格/连字符可选。如果没有大量的if语句,我怎么能这样做呢?

到目前为止:

if(str.matches("^[A-Z0-9 ()-?]+$"){
    return str;
}

如何使这些括号/连字符/空格可选?感谢。

2 个答案:

答案 0 :(得分:0)

如果需要匹配A-Z0-9并将其作为可选项,那么在Java中您只需要:

if (str.matches("(?=.*?[A-Z0-9])[A-Z0-9 ()-]+") {
    return str;
}
  • (?=.*?[A-Z0-9])是确保[A-Z0-9]课程中至少有一个角色的先行者。
  • 已删除? ?字面意思是字符类。
  • 空格,圆括号和连字符是可选的。
  • matches在尝试将完整输入与给定的正则表达式匹配时,不需要锚点。

答案 1 :(得分:0)

如果我的问题是正确的,A-Z0-9是强制性的,可选( )- - 对吧?

然后您需要确保至少匹配一次A-Z0-9

^[A-Z0-9 ()-]*[A-Z0-9]+[A-Z0-9 ()-]*$

这将匹配

A
AB9D
A(9-
-BC)
-8-D

但不是

(-
---
)))
-

Debuggex:

^[A-Z0-9 ()-]*[A-Z0-9]+[A-Z0-9 ()-]*$

Regular expression visualization

Debuggex Demo