我希望这个正则表达式只产生字符串acl
。我怎么做 ?即使我有一个否定运算符,我仍然会得到2013-
。
void testPattern()
{
Pattern pattern =
Pattern.compile("^.*-");
Matcher matcher =
pattern.matcher("2013-acl");
boolean found = false;
while (matcher.find())
{
println matcher.group();
}
}
答案 0 :(得分:2)
您的模式"^.*-"
仅匹配输入,直到连字符。
将其更改为"^.*-(.*)$"
,而不是matcher.group()
使用matcher.group(1)
。
所以使用这个修改过的模式并使用相同的输入:
^
匹配输入的开头.*
匹配2013
-
与-
.*
匹配acl
$
匹配输入的结尾第二个.*
左右的括号构成一个捕获组。捕获的模式可通过matcher.group(1)
获得。
答案 1 :(得分:1)
使用StringBuilder
删除-
之前的所有内容。
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
。
答案 2 :(得分:1)
您可以使用它来获取-
:(?<=-).*$
但是,正如已经指出的那样......只需在-
上拆分就更容易了。
答案 3 :(得分:0)
^
是字符串运算符的开头,而不是否定运算符。
如果您只想匹配我建议使用的结尾:
"-(\w+)"
(不要忘记在Java中逃避斜杠。)
然后检索$1
变量中匹配的内容。
您可以使用Matcher.group()功能执行此操作。
Pattern pattern =
Pattern.compile("-(\\w+)");
Matcher matcher =
pattern.matcher("2013-acl");
matcher.find();
println matcher.group(1);
答案 4 :(得分:0)
为什么不将acl
作为正则表达式?或acl$
如果你只想匹配acl,如果它在字符串的末尾