锁定老帖子 主题:神奇的java正则表达式
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (6)
|
|
---|---|
作者 | 正文 |
发表时间:2011-01-06
最后修改:2011-01-06
项目里用正则表达来匹配解析cookie,表达为: private final static Pattern PATTERN = Pattern.compile("(?:\\s|[;,])*\\$*([^;=]+)(?:=(?:[\"']((?:\\\\.|[^\"])*)[\"']|([^;,]*)))?(\\s*(?:[;,]+\\s*|$))");(代码来自开源项目netty的CookieDecoder) 代码上线后,偶尔报错误log: java.lang.StackOverflowError
at java.util.regex.Pattern$GroupHead.match(Pattern.java:4166)
at java.util.regex.Pattern$Loop.match(Pattern.java:4295)
at java.util.regex.Pattern$GroupTail.match(Pattern.java:4227)
at java.util.regex.Pattern$BranchConn.match(Pattern.java:4078)
at java.util.regex.Pattern$CharProperty.match(Pattern.java:3345)
at java.util.regex.Pattern$Branch.match(Pattern.java:4114)
at java.util.regex.Pattern$GroupHead.match(Pattern.java:4168)
at java.util.regex.Pattern$Loop.match(Pattern.java:4295)
at java.util.regex.Pattern$GroupTail.match(Pattern.java:4227)
at java.util.regex.Pattern$BranchConn.match(Pattern.java:4078)
at java.util.regex.Pattern$CharProperty.match(Pattern.java:3345)
at java.util.regex.Pattern$Branch.match(Pattern.java:4114)
at java.util.regex.Pattern$GroupHead.match(Pattern.java:4168)
at java.util.regex.Pattern$Loop.match(Pattern.java:4295)
at java.util.regex.Pattern$GroupTail.match(Pattern.java:4227)
很长,略。
初步认为是请求头的cookie值含有特殊的符号造成stackOverflowError,但把这个出错的cookie的值放在本地机器跑,没有出错,正常解析,更诡异的是,就算是同样的cookie值在线上服务器也是有时候才出错,有时候却完全正常(排除多线程并发的问题,本身java.util.regex.Pattern是线程安全的,另外是单人手工测试,用btrace跟踪确认),如此执行结果不确定,还不说正则本身的性能问题(一字烂),唉!
线上jdk是sun 64bit jdk1.6_18,正则也是jdk自带的
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2011-01-06
80% 是你正则 写的有问题
|
|
返回顶楼 | |
发表时间:2011-01-06
treemap 写道 80% 是你正则 写的有问题
废话,用正规表达式本身就是一错 |
|
返回顶楼 | |
发表时间:2011-01-06
不知道楼主要表达什么
|
|
返回顶楼 | |
发表时间:2011-01-06
我去。。这维护起来不是一般的恶心啊
|
|
返回顶楼 | |
发表时间:2011-01-07
既然是stackoverflow,那么加大栈空间试试,感觉是正则匹配太复杂了。
|
|
返回顶楼 | |
发表时间:2011-01-07
正则的效率本身就不高,只是为了方便而已
|
|
返回顶楼 | |
发表时间:2011-01-07
对于正则表达式,请记住一句老话:“ 您有一个问题,用正则表达式解决。那您就有两个问题了。”
|
|
返回顶楼 | |
发表时间:2011-01-07
xingqiba 写道 对于正则表达式,请记住一句老话:“ 您有一个问题,用正则表达式解决。那您就有两个问题了。”
|
|
返回顶楼 | |
发表时间:2011-01-07
afei1689 写道 treemap 写道 80% 是你正则 写的有问题
废话,用正规表达式本身就是一错 为什么是错呢... |
|
返回顶楼 | |