无法匹配我的正则表达式

时间:2014-08-15 18:49:30

标签: java regex

我正在尝试匹配一个看起来像" WIFLYMODULE-xxxx"的字符串。其中x可以是任何数字。例如,我希望能够找到以下内容...... WIFLYMODULE-3253 WIFLYMODULE-1585 WIFLYMODULE-1632

我目前正在使用

final Pattern q = Pattern.compile("[WIFLYMODULE]-[0-9]{3}");

但我没有拿起我想要的字符串。所以我的问题是,为什么我的正则表达式不起作用?我是以错误的方式去做的吗?

5 个答案:

答案 0 :(得分:1)

您应该使用(..)代替[...][..]用于Character class

使用"字符类",也称为"字符集",您可以告诉正则表达式引擎只匹配多个字符中的一个。

(WIFLYMODULE)-[0-9]{4}

这是demo

注意:但在这种情况下根本不需要它。 (...)用于捕获组以Matcher.group(index)

访问它

重要提示:使用\b作为字边界以匹配正确的字

\\bWIFLYMODULE-[0-9]{4}\\b

示例代码:

String str = "WIFLYMODULE-3253 WIFLYMODULE-1585 WIFLYMODULE-1632";
Pattern p = Pattern.compile("\\bWIFLYMODULE-[0-9]{4}\\b");
Matcher m = p.matcher(str);
while (m.find()) {
    System.out.println(m.group());
}

输出:

WIFLYMODULE-3253
WIFLYMODULE-1585
WIFLYMODULE-1632

答案 1 :(得分:1)

这种方式可行:

final Pattern q = Pattern.compile("WIFLYMODULE-[0-9]{4}");

模式分解为:

WIFLYMODULE-         The literal string WIFLYMODULE-
[0-9]{4}             Exactly four digits

你拥有的是:

[WIFLYMODULE]        Any one of the characters in WIFLYMODULE
-                    The literal string -
[0-9]{3}             Exactly three digits

答案 2 :(得分:1)

正则表达式应该是:

"WIFLYMODULE-[0-9]{4}"

方括号表示: 中列出的其中一个字符。你也匹配三个而不是四个。所以你的匹配字符串就像(xxx是三位数):

W-xxx, I-xxx, F-xxx, L-xxx, Y-xxx, M-xxx, O-xxx, D-xxx, U-xxx, L-xxx, E-xxx

答案 3 :(得分:1)

您将其匹配为3位而不是4位。将WIFLYMODULE放在[]内使其仅匹配其中一个字符。

final Pattern q = Pattern.compile("WIFLYMODULE-[0-9]{4}");

答案 4 :(得分:1)

[...]表示括号中的一个字符必须匹配,而不是其中的字符串。

但是,您希望匹配WIFLYMODULE,因此,您必须使用Pattern.compile("WIFLYMODULE-[0-9]{3}");Pattern.compile("(WIFLYMODULE)-[0-9]{3}");

{n}表示字符(或组)必须匹配n次。在您的示例中,您需要4而不是3:Pattern.compile("WIFLYMODULE-[0-9]{4}");