锁定老帖子 主题:神奇的java正则表达式
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (6)
|
|
---|---|
作者 | 正文 |
发表时间:2011-01-07
afei1689 写道 解析cookie用的是netty的代码:http://www.google.com/codesearch/p?hl=zh-CN#HUd3wh57nP8/trunk/FindMistakes/Server2/netty-3.2.1.Final-dist/src/main/java/org/jboss/netty/handler/codec/http/CookieDecoder.java&q=cookieDecoder.java&sa=N&cd=1&ct=rc
类似好像有人报过类似bug: http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6337993, 我想说的,正则这玩意儿慎用,简单的字符串处理可以自己写代码,复杂的字符串它的性能又不行(可以考虑antlr),更杯具是像我这种情况同样的输入,处理结果竟不一样 不是性能不行 是你不会用. 正则应该用在描述容易改变的规则. 比如文本的搜索条件,输入的校验等. 方便以后规则的更改. 见过法师下副本拿绷带当治疗的?奉劝LZ趁早换职业吧. |
|
返回顶楼 | |
发表时间:2011-01-07
ouchxp 写道 afei1689 写道 解析cookie用的是netty的代码:http://www.google.com/codesearch/p?hl=zh-CN#HUd3wh57nP8/trunk/FindMistakes/Server2/netty-3.2.1.Final-dist/src/main/java/org/jboss/netty/handler/codec/http/CookieDecoder.java&q=cookieDecoder.java&sa=N&cd=1&ct=rc
类似好像有人报过类似bug: http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6337993, 我想说的,正则这玩意儿慎用,简单的字符串处理可以自己写代码,复杂的字符串它的性能又不行(可以考虑antlr),更杯具是像我这种情况同样的输入,处理结果竟不一样 不是性能不行 是你不会用. 正则应该用在描述容易改变的规则. 比如文本的搜索条件,输入的校验等. 方便以后规则的更改. 见过法师下副本拿绷带当治疗的?奉劝LZ趁早换职业吧. 你会来解析一下这是为何,我说的性能,你提的是灵活性,有毛关系。 装*给雷劈就是你这种 |
|
返回顶楼 | |
发表时间:2011-01-07
您有一个问题,用正则表达式解决。那您就有两个问题了
|
|
返回顶楼 | |
发表时间:2011-01-07
afei1689 写道 ouchxp 写道 afei1689 写道 解析cookie用的是netty的代码:http://www.google.com/codesearch/p?hl=zh-CN#HUd3wh57nP8/trunk/FindMistakes/Server2/netty-3.2.1.Final-dist/src/main/java/org/jboss/netty/handler/codec/http/CookieDecoder.java&q=cookieDecoder.java&sa=N&cd=1&ct=rc
类似好像有人报过类似bug: http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6337993, 我想说的,正则这玩意儿慎用,简单的字符串处理可以自己写代码,复杂的字符串它的性能又不行(可以考虑antlr),更杯具是像我这种情况同样的输入,处理结果竟不一样 不是性能不行 是你不会用. 正则应该用在描述容易改变的规则. 比如文本的搜索条件,输入的校验等. 方便以后规则的更改. 见过法师下副本拿绷带当治疗的?奉劝LZ趁早换职业吧. 你会来解析一下这是为何,我说的性能,你提的是灵活性,有毛关系。 装*给雷劈就是你这种 吐吐槽就算了。还觉着不爽你就换种实现。 多大事啊? |
|
返回顶楼 | |
发表时间:2011-01-07
我的正则式不怎么强。但是见过也维护过超复杂的正则式,比如超过几十行的。
经验是正则式最好用于单行简单内容的匹配,如果内容太长的话很难保证有时会出错。 关于StackOverflow原来有次的出错原因是用正则式处理去空白,当空白行太多时正则式写的不好会错。 另外就是对于特殊字符,GBK中的日文等等,有时会导致解析一次几十分钟或者几个小时才能完成。细节原因也没有搞清楚,后来对于这部分自己写解析器搞定了。 最终建议:对于自己能控制的内容,用正则式问题不大。对于未知内容,用正则式有风险,而且比较大。 |
|
返回顶楼 | |
发表时间:2011-01-07
yym955 写道 您有一个问题,用正则表达式解决。那您就有两个问题了
呵呵,我们用netty来做一个http server,发现它有现成cookie decoder,直接就用上,也没注意它原来是正则来实现的,出了问题才发现,杯具! |
|
返回顶楼 | |
发表时间:2011-01-07
正则这东西稍微长一点就很难看懂,但若不用正则,用什么呢?自己写很多if和循环去判断?更头晕。
我觉得折衷的方案是,不要写很复杂的正则。一步一步来,抽丝剥茧。 比如先写(\w*)=(\w*),然后把第一组和第二租用正则再解析。 |
|
返回顶楼 | |
发表时间:2011-01-07
没 看懂!
|
|
返回顶楼 | |
发表时间:2011-01-07
如果楼主对于以上意见都不接受, 也可以忽视以下做法法
1. 废除正则, 自己写分析代码, cookie的解析还是很好做的, 看下规范, 很快的 或者, 2. java -server -Xss2m 楼主, 既然来问问题的, 还是注意下自己的态度 基于你对这个溢出不明白含义, 楼主的jvm的基础有些问题,多看看每个参数的含义, 并且测试下, 让你受益匪浅。 |
|
返回顶楼 | |
发表时间:2011-01-07
hatedance 写道 正则这东西稍微长一点就很难看懂,但若不用正则,用什么呢?自己写很多if和循环去判断?更头晕。
我觉得折衷的方案是,不要写很复杂的正则。一步一步来,抽丝剥茧。 比如先写(\w*)=(\w*),然后把第一组和第二租用正则再解析。 如果是要用正则解析cookie,这个表达式:(\w*)=(\w*)明显是有问题的,在某些版本的cookie中,两个双引号以内的value是可以包含=等特殊符号的 |
|
返回顶楼 | |