首页 » 精通正则表达式(第3版) » 精通正则表达式(第3版)全文在线阅读

《精通正则表达式(第3版)》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已经修正了,所以在字符组中可以正常工作。