论坛首页 Java企业应用论坛

神奇的java正则表达式

浏览 28498 次
精华帖 (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趁早换职业吧.
0 请登录后投票
   发表时间: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趁早换职业吧.

你会来解析一下这是为何,我说的性能,你提的是灵活性,有毛关系。
装*给雷劈就是你这种
0 请登录后投票
   发表时间:2011-01-07  
您有一个问题,用正则表达式解决。那您就有两个问题了
0 请登录后投票
   发表时间: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趁早换职业吧.

你会来解析一下这是为何,我说的性能,你提的是灵活性,有毛关系。
装*给雷劈就是你这种


吐吐槽就算了。还觉着不爽你就换种实现。
多大事啊?
0 请登录后投票
   发表时间:2011-01-07  
我的正则式不怎么强。但是见过也维护过超复杂的正则式,比如超过几十行的。

经验是正则式最好用于单行简单内容的匹配,如果内容太长的话很难保证有时会出错。

关于StackOverflow原来有次的出错原因是用正则式处理去空白,当空白行太多时正则式写的不好会错。

另外就是对于特殊字符,GBK中的日文等等,有时会导致解析一次几十分钟或者几个小时才能完成。细节原因也没有搞清楚,后来对于这部分自己写解析器搞定了。

最终建议:对于自己能控制的内容,用正则式问题不大。对于未知内容,用正则式有风险,而且比较大。
0 请登录后投票
   发表时间:2011-01-07  
yym955 写道
您有一个问题,用正则表达式解决。那您就有两个问题了

呵呵,我们用netty来做一个http server,发现它有现成cookie decoder,直接就用上,也没注意它原来是正则来实现的,出了问题才发现,杯具!
0 请登录后投票
   发表时间:2011-01-07  
正则这东西稍微长一点就很难看懂,但若不用正则,用什么呢?自己写很多if和循环去判断?更头晕。
我觉得折衷的方案是,不要写很复杂的正则。一步一步来,抽丝剥茧。
比如先写(\w*)=(\w*),然后把第一组和第二租用正则再解析。
0 请登录后投票
   发表时间:2011-01-07  
没 看懂!
0 请登录后投票
   发表时间:2011-01-07  
如果楼主对于以上意见都不接受, 也可以忽视以下做法法
1. 废除正则, 自己写分析代码, cookie的解析还是很好做的, 看下规范, 很快的
或者,
2. java -server -Xss2m

楼主, 既然来问问题的, 还是注意下自己的态度
基于你对这个溢出不明白含义, 楼主的jvm的基础有些问题,多看看每个参数的含义, 并且测试下, 让你受益匪浅。
0 请登录后投票
   发表时间:2011-01-07  
hatedance 写道
正则这东西稍微长一点就很难看懂,但若不用正则,用什么呢?自己写很多if和循环去判断?更头晕。
我觉得折衷的方案是,不要写很复杂的正则。一步一步来,抽丝剥茧。
比如先写(\w*)=(\w*),然后把第一组和第二租用正则再解析。

如果是要用正则解析cookie,这个表达式:(\w*)=(\w*)明显是有问题的,在某些版本的cookie中,两个双引号以内的value是可以包含=等特殊符号的
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics