我正在阅读Java正则表达式教程,似乎只是教导测试模式是否匹配,但不告诉我如何引用匹配的模式。
例如,我有一个字符串“我的名字是xxxxx”。我想要打印xxxx。我如何使用Java正则表达式?
感谢。
答案 0 :(得分:2)
你在读什么教程?太阳的人非常彻底地解决了这个问题,但你必须正确地阅读它:)
通过括号捕获字符串的一部分。如果要捕获字符串中的组,则必须将正则表达式的这一部分放在括号中。这些组按括号出现的顺序定义,索引为0的组表示整个字符串。
例如,正则表达式“日([0-9] +) - 注([0-9] +)”将定义3组:
至于实际代码以及如何检索在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
答案 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