日期:2014-05-20  浏览次数:20967 次

不同版本JDK对正则表达式支持不同?
编写环境:
Windows 7 X64,JDK 1.7(7.0) X64
工程版本:
J2SE 1.5(5.0)

我在此环境编写了一个小东西、打包成jar包、本地运行成功、但是发给别人运行后竟然提示正则表达式编译错误

目标运行环境:
WIN XP X86,JDK 1.6(6.0) X86

运行后提示:
Exception in thread "main" java.util.regex.PatternSyntaxException: Look-behind group does not have an obvious maximum length near index 27
nick-name="(?<username>[^"]+)"

相关代码:

Pattern ptnNickName = Pattern
.compile("nick-name=\"(?<username>[^\"]+)\"");

这个正则表达式妥妥的是没有问题的呀?为何在别人的机器上运行会提示正则错误?
难道不同版本JDK对正则的实现不同?但是我指定工程版本是1.5的、那理论上不是应该都是向下兼容的、那不都一样了吗?

------解决方案--------------------
探讨
编写环境:
Windows 7 X64,JDK 1.7(7.0) X64
工程版本:
J2SE 1.5(5.0)

我在此环境编写了一个小东西、打包成jar包、本地运行成功、但是发给别人运行后竟然提示正则表达式编译错误

目标运行环境:
WIN XP X86,JDK 1.6(6.0) X86

运行后提示:
Exception in thread "main" java.ut……

------解决方案--------------------
探讨

引用:

我不清楚什么叫工程版本什么叫本地版本


就是eclipse里新建工程的时候 应该有个选项让你选择使用的JDK版本吧?

------解决方案--------------------
哦三楼已经说了

前面的解释应该是间接原因,直接原因是1.5的正则表达式语法无法接受这个表达式

Exception in thread "main" java.util.regex.PatternSyntaxException: Look-behind group does not have an obvious maximum length near index 27
nick-name="(?<username>[^"]+)"

look-behind group不支持 没有明显最大长度的 表达式含有导致不确定长度量词+ *等
------解决方案--------------------
其实 这个 运行的版本 是可以改变的

本地版本: 指的就是 本地安装的JDK, eclipse默认运行的是这个

工程版本: 指的是 本工程下运行的JDK 其中JDK是解压好的,只需要 导入就OK了

至于1.7 还没用过,只需要 在eclipse工程运行的时候, 自己 切换一下JDK 运行就OK了