2013-12-10 20 views
1

我有一個字符串和一個正則表達式。正則表達式引用Java

的字符串像DH18

,我有我的正則表達式([a-zA-Z]*)([0-9]*)其分裂了字母和單詞

我只想數字,使載於第二大括號。我如何去引用這個。

我要像

if ($1 == 18) 
    blah; 

回答

6

一份聲明中您可以使用非捕獲組或一方的回顧後,你不想要的:

(?:[a-zA-Z]*)([0-9]*) // Non-capturing group 
(?<=[a-zA-Z]*)([0-9]*) // Lookbehind 

注意,正則表達式返回組隻字符串,即使該組表示一個數字。因此,檢查$1 == 18需要使用equals()

if (matcher.group(1).equals("18")) { 
    ... 
} 
+0

爲什麼你需要一個非捕獲組? '[a-zA-Z] *([0-9] *)'是否就夠了? – shyam

+0

@shyam我認爲字母部分需要出現才能使匹配成爲有效,否則OP根本沒有必要提及它。 – dasblinkenlight

0
Pattern p = Pattern.compile("-?\\d+"); 
    Matcher m = p.matcher("DH18"); 
    while (m.find()) { 
     System.out.println(m.group()); //will print 18 
    } 
1

隨着([a-zA-Z]*)([0-9]*)你必須選擇的$2代替$1得到的數字爲$ 0是完全吻合,並捕捉部分從$1開始。

if($2.equals("18"))