我希望从完全限定的类名中清除除类名以外的所有内容。所以,我可能有类似的东西......
"class gqlMain.Node"
...我想结束......
"Node"
...我很确定我的模式...
"*.[\\.][^\\.]*"
..是正确的,如果只是像上面那样运行它并用...测试
myMatcherObject.matches()
...它总是返回 true,但是当我尝试添加分组时,例如...
"(.*[\\.])([^\\.]*)"
...我总是收到找不到匹配项的错误。不确定发生了什么。
已添加:
感谢您的快速回复,伙计们。是的,我真的不明白这个。我的确切代码是....
public String toString() {
Pattern packagePatt = Pattern.compile("(.*[\\.])([^\\.]*)");
//
System.out.println(this.compClass.getName().toString());
Matcher packageMatch = packagePatt.matcher(this.compClass.getName().toString());
//
System.out.println(packageMatch.group(2));
return packageMatch.group(2);
}
例如,第一个 print 语句生成一个类似于“gqlMain.Node”的字符串(我知道 toString() 是多余的,我添加它是出于愤怒)。第二个 print 语句产生错误,return 语句也是如此。使用调试器,我可以看到 Matcher 对象的组列表在每个索引处都保持为空。但是如果我插入一个...
if (packageMatcher.matches()) {
// print true
}
...我总是得到“真实”。这真的没有意义。
最佳答案
以下程序报告“true”:
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class so {
/**
* @param args
*/
public static void main(String[] args) {
Pattern p = Pattern.compile("(.*[\\.])([^\\.]*)");
Matcher m = p.matcher("class gqlMain.Node");
System.out.println(m.matches());
System.out.println(m.group(0));
System.out.println(m.group(1));
System.out.println(m.group(2));
}
}
完整的输出是:
true
class gqlMain.Node
class gqlMain.
Node
关于java - Java 中的正则表达式分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11554180/