2014-11-21 63 views
0

考慮下面的正則表達式和字符串正則表達式 - 如何Matcher.Group工作

String regex = "Your fax has been successfully sent to (.*?)"; 
String val = "Your fax has been successfully sent to 123456789 at 123456789." 

現在,據我可以看到這個比賽,但如果我叫Pattern.matcher(val).group(1)然後我得到的指數外邊界例外

爲什麼組1不是

123456789在123456789?

感謝

+0

使用find函數進行檢查。 – 2014-11-21 11:12:26

回答

1
Your fax has been successfully sent to (.*?)\. 

嘗試this.Capture的groups.See demo.You沒有使用如發現他人,你也沒有給捕獲組的方式來stop.You需要提供.它停止在.陳述和捕獲休息。

http://regex101.com/r/uV3aL0/34

+0

ahhh是 - 我用的是find(沒有粘貼在我的壞道上面),但是關鍵是\。我錯過了 - 謝謝 – Biscuit128 2014-11-21 11:17:32

+0

@ Biscuit128歡迎:) – vks 2014-11-21 11:17:58

1

爲什麼會1組不是[...]

因爲你創建匹配,但不實際運行它。

你需要.find()(和檢查返回值),你可以實際檢索組之前:

final Matcher matcher = yourPattern.matcher(val); 
if (matcher.find()) 
    // use matcher.group(1) 

其他替代方案:.matches().findFirst()