我有一個字符串和一個正則表達式。正則表達式引用Java
的字符串像DH18
,我有我的正則表達式([a-zA-Z]*)([0-9]*)
其分裂了字母和單詞
我只想數字,使載於第二大括號。我如何去引用這個。
我要像
if ($1 == 18)
blah;
我有一個字符串和一個正則表達式。正則表達式引用Java
的字符串像DH18
,我有我的正則表達式([a-zA-Z]*)([0-9]*)
其分裂了字母和單詞
我只想數字,使載於第二大括號。我如何去引用這個。
我要像
if ($1 == 18)
blah;
一份聲明中您可以使用非捕獲組或一方的回顧後,你不想要的:
(?:[a-zA-Z]*)([0-9]*) // Non-capturing group
(?<=[a-zA-Z]*)([0-9]*) // Lookbehind
注意,正則表達式返回組隻字符串,即使該組表示一個數字。因此,檢查$1 == 18
需要使用equals()
:
if (matcher.group(1).equals("18")) {
...
}
Pattern p = Pattern.compile("-?\\d+");
Matcher m = p.matcher("DH18");
while (m.find()) {
System.out.println(m.group()); //will print 18
}
隨着([a-zA-Z]*)([0-9]*)
你必須選擇的$2
代替$1
得到的數字爲$ 0是完全吻合,並捕捉部分從$1
開始。
if($2.equals("18"))
爲什麼你需要一個非捕獲組? '[a-zA-Z] *([0-9] *)'是否就夠了? – shyam
@shyam我認爲字母部分需要出現才能使匹配成爲有效,否則OP根本沒有必要提及它。 – dasblinkenlight