【发布时间】:2019-07-15 14:00:49
【问题描述】:
我正在使用 Matcher 类在 Java 中处理正则表达式
这里是我所拥有的描述:
我有一个由管道分隔的多个正则表达式。 我必须得到与其中一个正则表达式匹配的单词组。
这是pattern变量:
private static Pattern pattern = Pattern.compile(
"^TDXF.*\\w+-(\\d+)(\\.\\d+)+_(\\d+\\.)+\\d+|^TD.{3}([0-9]).{4}$|^.*_.*-.*-([0-9]*)\\..*\\..*\\..*$");
该方法用于返回与单词关联的组号。
private static String getGroup(String gp) {
String g= "";
if (gp== null) {
return g;
}
final Matcher matcher = pattern.matcher(gp);
if (matcher.matches()) {
g= matcher.group(1) != null ? matcher.group(1) : matcher.group(2);
}
return g;
}
我写了一个单元测试来测试它是否适用于这个字符串,例如:TD91160152,但它失败了。
@Test
public void testGroup() {
Assert.assertEquals("6", this.getStep("TD91160152"));
Assert.assertEquals("2", this.getStep("TDXF-tv-2.5.10.1_0.0.0.0"));
Assert.assertEquals("6", this.getStep("TD91160118_SF11043004"));
Assert.assertEquals("3", this.getStep("TDXF_sih-tv-3.4.12.1_7.21.3.1"));
Assert.assertEquals("5", this.getStep("TD20_sih-tv-5.2.20.1"));
Assert.assertEquals("5", this.getStep("TD30_sih-tv-5.15.8.1"));
}
TD91160152 匹配这个模式 ^TD.{3}([0-9]).{4}$ 并且它应该返回 6 作为 matcher.group(1) 编号:see this demo
我不知道为什么它会失败并返回 null 作为组号。 我不认为这与正则表达式之间的重叠有关。
我试图删除其他模式,只放了
private static Pattern pattern = Pattern.compile(
"^TD.{3}([0-9]).{4}$");
它起作用了。我不知道为什么当我添加另一个正则表达式时它返回 null。
谁能帮我解决这个问题? 非常感谢。
【问题讨论】: