请帮我模式匹配。我想构建一个模式,该模式将匹配以下字符串中的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]
这是错误的。请帮助我,谢谢你在这个帖子上的时间。
答案 0 :(得分:5)
在角色类中,您无需使用替换来匹配j
或c
。字符类本身意味着匹配其中的任何单个字符。因此,[jc]
本身将匹配j
或c
。
此外,您不需要匹配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 ]
标志,忽略空格。编写可读的正则表达式通常很有帮助。