2

我希望这个正则表达式只产生 string acl。我怎么做 ?我不断得到2013-,即使我有一个否定运算符。

void testPattern()
     {
        Pattern pattern =
        Pattern.compile("^.*-");

        Matcher matcher =
        pattern.matcher("2013-acl");

        boolean found = false;
        while (matcher.find())
        {
            println matcher.group();

        }
      }
4

5 回答 5

2

您的模式"^.*-"仅在连字符之前匹配输入。

将其更改为"^.*-(.*)$"and 而不是matcher.group()use matcher.group(1)

因此,使用此修改后的模式并使用相同的输入:

  1. ^匹配输入的开头
  2. 第一.*场比赛2013
  3. -匹配一个-
  4. 第二.*场比赛acl
  5. $匹配输入的结尾

second 周围的括号.*构成一个捕获组。捕获的模式变得可用matcher.group(1)

于 2013-03-12T21:54:29.803 回答
1

没有正则表达式的解决方案:

使用 aStringBuilder删除-.

String string1 = "2013-acl";
StringBuilder b = new StringBuilder(string1);
b.delete(0, defaultBrowser.lastIndexOf('-') + 1);
string1 = b.toString();
System.out.println(string1);

该程序应该打印出来acl。不需要正则表达式。

如果您需要正则表达式的解决方案:

String string1 = "2013-acl";
Matcher matcher = Pattern.compile("(?<=-).*$").matcher(string1);
if (matcher.find()) System.out.println(matcher.group());

该程序应该打印出来acl

于 2013-03-12T21:52:17.623 回答
1

您可以使用它来获取以下内容之后的所有内容-(?<=-).*$

但是,正如已经指出的那样……简单地拆分-会更容易。

于 2013-03-12T21:54:34.257 回答
0

^是字符串运算符的开头而不是否定运算符。

如果您只想匹配我建议使用的结尾:

"-(\w+)"

(不要忘记在 Java 中转义反斜杠。)

然后检索$1变量中匹配的内容。

您可以使用Matcher.group()函数来执行此操作。

Pattern pattern =
Pattern.compile("-(\\w+)");

Matcher matcher =
pattern.matcher("2013-acl");

matcher.find();
println matcher.group(1);
于 2013-03-12T21:51:13.757 回答
0

为什么不只是做acl正则表达式?或者acl$如果您只希望它在字符串末尾匹配 acl

于 2013-03-12T21:55:32.503 回答