java - Java 中的正则表达式分组

标签 java regex pattern-matching package

我希望从完全限定的类名中清除除类名以外的所有内容。所以,我可能有类似的东西......

"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/

相关文章:

c# - 切换模式匹配大小写回退

scala - Scala 中可以匹配范围吗?

java - 如何将一个android studio项目合并到另一个android studio项目中

java - 使用 MOxy 进行 xml 绑定(bind)返回 null 未编码对象

java - Android 按钮 Action 慢

Python:使用正则表达式进行数据验证

php - 带有特殊字符的目标 URL

java - (?) 通配符泛型的不规则性

php - 正则表达式匹配 1 个 HTML 文件中的 2 个 html 标签

java - 使用 Java 从 CSV 文件中过滤掉数字