2012-01-06 61 views
3

如果我有一個正則表達式,我該如何返回它找到的子字符串? 我相信我一定會錯過某些明顯的東西,但我發現了各種方法來確認該子字符串包含在我正在搜索的字符串中,或​​者用其他東西替換它,但不返回我已經找到。返回用正則表達式發現的字符串

+1

請告訴我們一些實際EXA代表你的意思的mples。否則,你可能會得到你可能不想要的意外答案。 – Lion 2012-01-06 01:14:59

回答

2
CharSequence inputStr = "abbabcd"; 

String patternStr = "(a(b*))+(c*)"; 

// Compile and use regular expression 
Pattern pattern = Pattern.compile(patternStr); 
Matcher matcher = pattern.matcher(inputStr); 
boolean matchFound = matcher.find(); 

if (matchFound) 
{ 
    // Get all groups for this match 
    for (int i=0; i<=matcher.groupCount(); i++) 
    { 
     String groupStr = matcher.group(i); 
    } 
} 

CharSequence是可讀的char值的等價性。該接口爲許多不同類型的字符序列提供統一的只讀訪問。 char值代表基本多語言平面(BMP)或替代品中的字符。詳情請參閱Unicode字符表示。

CharSequence是一個接口

public interface CharSequence 

Capturing groups

group with parameter例如

Java Regex Tutorial

7
Matcher matcher = Pattern.compile("a+").matcher("bbbbaaaaabbbb"); 
if(matcher.find()) 
    System.out.println(matcher.group(0)); //aaaaa 

如果你想具體部分

Matcher matcher = Pattern.compile("(a+)b*(c+)").matcher("bbbbaaaaabbbbccccbbb"); 
if(matcher.find()){ 
    System.out.println(matcher.group(1)); //aaaaa 
    System.out.println(matcher.group(2)); //cccc 
    System.out.println(matcher.group(0)); //aaaaabbbbcccc 
} 

0組完整的模式。其他組在正則表達式(用括號隔開+ ) B * ( C + )並且可以單獨獲得

+0

組0表示整個模式,因此表達式「m.group(0)」等同於「m.group()」。 – 2017-10-11 16:53:17

1
import java.util.regex.*; 

class Reg 
{ 
    public static void main(String [] args) 
    { 
    Pattern p = Pattern.compile("ab"); 
    Matcher m = p.matcher("abcabd"); 
    System.out.println("Pattern is " + m.pattern()); 
    while(m.find()) 
    { 
     System.out.println(m.start() + " " + m.group()); 
     // m.start() will give the index and m.group() will give the substring 
    } 
    } 
} 
相關問題