我正在閱讀Java正則表達式教程,它似乎只教會測試模式是否匹配,但不告訴我如何引用匹配的模式。Java中的正則表達式:如何引用「匹配模式」?
例如,我有一個字符串「我的名字是xxxxx」。我想打印xxxx。我如何用Java正則表達式來做到這一點?
謝謝。
我正在閱讀Java正則表達式教程,它似乎只教會測試模式是否匹配,但不告訴我如何引用匹配的模式。Java中的正則表達式:如何引用「匹配模式」?
例如,我有一個字符串「我的名字是xxxxx」。我想打印xxxx。我如何用Java正則表達式來做到這一點?
謝謝。
是你讀什麼教程?太陽的一個解決這個話題相當徹底,但你必須正確閱讀:)
通過括號完成捕獲的一部分字符串。如果你想在一個字符串中捕獲一個組,你必須將這部分正則表達式放在括號內。這些組按照括號出現的順序定義,索引爲0的組表示整個字符串。
例如,正則表達式 「日([0-9] +) - 注([0-9] +)」 將限定3個基團:
至於實際的代碼,以及如何找回你已經在你的正則表達式定義的組,看一下Java文檔,尤其是匹配器類及其組方法: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
希望這有助於, 乾杯
可以使用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
注意在模式中使用括號和Matcher
的group()
方法
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
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));
}
的括號形成捕獲組。組0是整個模式,組1是反向參考。
上述程序的輸出:
name is Ross
Ross
我不明白組的概念。 比方說,我有一個字符串「我的名字是邁克爾傑克遜,他的名字是巴拉克奧巴馬」。我想抓住「邁克爾傑克遜」和「巴拉克奧巴馬」。我該怎麼做? – Saobi 2009-09-26 03:01:43
@Saobi:注意括號!!!! – 2009-09-26 03:07:47
好的。我知道了。我又遇到了另一個難題: 是否xxx xxx(可能是任意數量的單詞)是生還是死? 我想捕捉:xxxxxx,活着,死去。 我該怎麼做? – Saobi 2009-09-26 03:20:02