不同版本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了