讀古今文學網 > 精通正則表達式(第3版) > Java版本差異 >

Java版本差異

Java Version Differences

本章開頭已經提到,本書主要針對Java 1.5.0。不過,目前Java 1.4.2仍然在廣泛應用,而Java 1.6已經整裝待發(已經發佈了beta版,但不會很快發佈正式版)。所以,我得簡要地提一下1.4.2和1.5.0(Update 7)之間的差異,以及1.5.0和目前的1.6「build 59g」的差異。

1.4.2和1.5.0之間的差異

Differences Between 1.4.2 and 1.5.0

相對Java 1.4.2,Java 1.5.0添加了許多新的方法。大多數新的方法主要是為了支持Matcher的檢索範圍。此外,Unicode支持也升級並提高了效率。所有的變化都在下面兩節詳細介紹(注9)。

1.5.0中的新方法

與檢索範圍相關的Matcher方法都沒有出現在Java 1.4.2中:

●region

●regionStart

●regionEnd

●useAnchoringBounds

●hasAnchoringBounds

●useTransparentBounds

●hasTransparentBounds

Java 1.4.2也不包含下面的方法:

●toMatchResult

●hitEnd

●requireEnd

●usePattern

●toString

Java 1.4.2不包含下面這個static方法:

●Pattern.quote

1.4.2和1.5.0關於Unicode支持的差異

1.4.2和1.5.0在Unicode相關的問題上有這些變化:

●Java 1.4.2的Unicode使用的是Unicode Version 3.0.0,1.5.0使用的是Unicode Version 4.0.0。這個改變影響到很多方面,例如字符的定義(例如,在Version 3.0.0中,\uFFFF之後是沒有代碼點的),以及屬性和Unicode區塊的定義。

●增強了通過「\p{…}」和「\P{…}」引用區塊的方式(參加 Java 關於 Character.UnicodeBlock的文檔,得到區塊列表及其正式名稱)。

Java 1.4.2中的規則是「去掉官方代碼塊名字中的空格,和開頭的In」。這樣,區塊引用就類似\p{InHangulJamo}和\p{InArabicPresentationForms-A}。

1.5.0 添加了兩種新的區塊命名。可以在官方塊名稱之前直接添加『In』,所以名字可以為\p{InHangul·Jamo}和\p{InArabic·Presentation·Forms-A}。也可以給Java的區塊標識符添加前綴『In』(是官方名稱,將空格和連字符替換為下畫線)\p{InHangul_Jamo}和\p{InArabic_Presentation_Forms_A}。

●Java 1.4.2存在一個古怪的bug,Arabic Presentation Forms-B和Latin Extended-B結尾的「B」必須寫作「Bound」,也就是說\p{InArabicPresentationForms-Bound}和\p{InLatinExtended-Bound}。

●Java 1.5.0中Character類的isSomeing方法支持正則表達式(☞369)。

1.5.0和1.6之間的差異

Differences Between 1.5.0 and 1.6

寫作本書時已經發佈的1.6和1.5.0在正則表達式的問題上只有兩個細微的差別:

●Java 1.6提供了之前沒有的對Pi和Pf的Unicode分類的支持。

●「\Q…\E」結構的bug已經修正了,所以在字符組中可以正常工作。