Java在Regex的支援看來不及Perl。需求如右:"FBI 34"這個字串要取得後綴字為1~2的數字,即"34",在Perl用法就很簡單:

"FBI 34" =~ /(\d{1,2})$/;
print "$1\n";  # 印出34

  但用java.util.regex就顯得很…偷雞。如下:

Pattern pattern = Pattern.compile(".+(\\d{1,2})$");

Matcher matcher = pattern.matcher("FBI 34");

if (matcher.matches()) System.out.println(matcher.group(1));   // 只印出4

  沒辦法做到貪多量詞。

  Perl的$1是記錄Regex Pattern裡的記憶小括號的內容,即\d{1,2},對映到java.util.regex則是透過Matcher的group(index)取得。記憶小括號的index計算方式從1開始,最左邊的小括號為1,次左邊的為2,例如:

FBI (Hello (\d+)! ([Ww]elcome)) to (home|office).

則:$3是[Ww]elcome、$2是\d+,而$1則是Hello (\d+)! ([Ww]elcome),$4就是home|office。

arrow
arrow
    全站熱搜

    Jemmy 發表在 痞客邦 留言(0) 人氣()