Java中的正则表达式:如何引用“匹配模式”?

时间:2009-09-26 02:50:17

标签: java regex

我正在阅读Java正则表达式教程,似乎只是教导测试模式是否匹配,但不告诉我如何引用匹配的模式。

例如,我有一个字符串“我的名字是xxxxx”。我想要打印xxxx。我如何使用Java正则表达式?

感谢。

4 个答案:

答案 0 :(得分:2)

你在读什么教程?太阳的人非常彻底地解决了这个问题,但你必须正确地阅读它:)

通过括号捕获字符串的一部分。如果要捕获字符串中的组,则必须将正则表达式的这一部分放在括号中。这些组按括号出现的顺序定义,索引为0的组表示整个字符串。

例如,正则表达式“日([0-9] +) - 注([0-9] +)”将定义3组:

  • group(0):整个字符串
  • group(1):正则表达式中的第一个组,即日期编号
  • group(2):正则表达式中的第二个组,即注释编号

至于实际代码以及如何检索在regexp中定义的组,请查看Java文档,尤其是Matcher类及其组方法:http://java.sun.com/j2se/1.5.0/docs/api/java/util/regex/Matcher.html

您可以使用这个非常有用的工具测试您的正则表达式:http://www.cis.upenn.edu/~matuszek/General/RegexTester/regex-tester.html

希望这有帮助, 干杯

答案 1 :(得分:1)

请注意模式中使用括号,group()上使用Matcher方法

import java.util.regex.*;

public class Example {
    static public void main(String[] args) {
        Pattern regex = Pattern.compile("My name is (.*)");
        String s = "My name is Michael";
        Matcher matcher = regex.matcher(s);

        if (matcher.matches()) {
            System.out.println("original string: " + matcher.group(0));
            System.out.println("first group: " + matcher.group(1));
        }
    }
}

输出是:

original string: My name is Michael
first group: Michael

答案 2 :(得分:0)

您可以使用Matcher group(int)方法:

 Pattern p = Pattern.compile("My name is (.*)");
  Matcher m = p.matcher("My name is akf");
  m.find();
  String s = m.group(1); //grab the first group*
  System.out.println(s);

输出:

akf

*查看matching groups

答案 3 :(得分:0)

Matcher m = Pattern.compile("name is (.*)").matcher("My name is Ross");
if (m.find()) {
  System.out.println(m.group(0));
  System.out.println(m.group(1));
}

aem的父母>捕获小组。组0是整个模式,组1是后向参考

上述程序输出:

name is Ross
Ross