“减号”进入这个正则表达式,怎么样?

时间:2017-03-21 07:22:31

标签: java regex

String str =“XYhaku(ABH1235-123548)”;

从上面的字符串,我只需要“ABH1235-123548”,到目前为止我创建了正则表达式

Pattern.compile("ABH\\d+")

但它返回false。那么正确的正则表达式是什么。

2 个答案:

答案 0 :(得分:1)

\d仅匹配数字。要包含其他字符,请使用character class

Pattern.compile("ABH[\\d-]+")

请注意,-必须放在字符类的第一位或最后一位,否则它将被视为范围指示符([A-Z]匹配A和{{之间的每个字母1}},例如)。避免这种情况的另一种方法是逃避它,但是在你的字符串中添加两个反斜杠......

答案 1 :(得分:1)

我会抓住括号中的任何内容:

Pattern p = Pattern.compile("\\((?<data>[A-Z\\d]+\\-\\d+)\\)"); 

或者,如果你想更开放(任何括号):

Pattern p = Pattern.compile("\\((?<data>.+\\)\\)");

然后抓住它:

String s = /* some input */;
Matcher m = p.matcher(s);
if (m.find()) { //just find first
    String tag = m.group("data"); //ABH1235-123548
}