[j- *]的Java模式

时间:2013-10-14 09:25:29

标签: java regex

请帮我模式匹配。我想构建一个模式,该模式将匹配以下字符串中的j-c-开头的单词(比如说)

[j-test] is a [c-test]'s name with [foo] and [bar]

模式需要找到[j-test][c-test](包括括号)。

到目前为止我尝试了什么?

String template = "[j-test] is a [c-test]'s name with [foo] and [bar]";
Pattern patt = Pattern.compile("\\[[*[j|c]\\-\\w\\-\\+\\d]+\\]");
Matcher m = patt.matcher(template);
while (m.find()) {
    System.out.println(m.group());
}

它的输出类似

[j-test]
[c-test]
[foo]
[bar]

这是错误的。请帮助我,谢谢你在这个帖子上的时间。

1 个答案:

答案 0 :(得分:5)

在角色类中,您无需使用替换来匹配jc。字符类本身意味着匹配其中的任何单个字符。因此,[jc]本身将匹配jc

此外,您不需要匹配j-c-之后的模式,因为您不会对它们感到困扰,因为它们始于j-或{ {1}}。

只需使用此模式:

c-

解释:

Pattern patt = Pattern.compile("\\[[jc]-[^\\]]*\\]");

在正则表达式中使用Pattern patt = Pattern.compile("(?x) " // Embedded flag for Pattern.COMMENT + "\\[ " // Match starting `[` + " [jc] " // Match j or c + " - " // then a hyphen + " [^ " // A negated character class + " \\]" // Match any character except ] + " ]* " // 0 or more times + "\\] "); // till the closing ] 标志,忽略空格。编写可读的正则表达式通常很有帮助。