我正在阅读一些旧代码,这些代码似乎旨在在一个目录中取出一系列句点(......)。它利用java正则表达式来实现这一目标。这是使用的代码。
input = input.replaceAll( ".*<elipses>.*", "" );
但是,除了这里,我没有看到带有“&lt;&gt;”的正则表达式:
特殊构造(命名捕获和非捕获)
(?<name>X)
X,作为命名捕获组
(http://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html)
<elipsis>
是什么意思?
答案 0 :(得分:3)
看起来就像一个Java 7命名组,其语法似乎不正确。
正确的语法如下:
// | named group "stuff" matches 0 or more characters
// | | named group "ellipses" 3 consecutive dots
// | | | non grouped stuff
Pattern p = Pattern.compile("(?<stuff>.*)(?<ellipses>\\.\\.\\.).*");
String input = "blah ... blah";
Matcher m = p.matcher(input);
if (m.find()) {
// printing back reference to named group "stuff"
System.out.println(m.group("stuff"));
// printing back reference to named group "ellipses"
System.out.println(m.group("ellipses"));
}
<强>输出强>
blah
...
否则,您的Pattern
正在尝试实际匹配包含<ellipses>
的某个标记,前面有任意数量的字符,后跟相同的字符。
对Java 7命名组here.
的一些API引用