我正在尝试匹配一个看起来像" WIFLYMODULE-xxxx"的字符串。其中x可以是任何数字。例如,我希望能够找到以下内容...... WIFLYMODULE-3253 WIFLYMODULE-1585 WIFLYMODULE-1632
我目前正在使用
final Pattern q = Pattern.compile("[WIFLYMODULE]-[0-9]{3}");
但我没有拿起我想要的字符串。所以我的问题是,为什么我的正则表达式不起作用?我是以错误的方式去做的吗?
答案 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}");