免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: justu78
打印 上一主题 下一主题

求教高手正则表达式的扩展用法 [复制链接]

求职 : 软件工程师
论坛徽章:
3
程序设计版块每日发帖之星
日期:2015-10-07 06:20:00程序设计版块每日发帖之星
日期:2015-12-13 06:20:00程序设计版块每日发帖之星
日期:2016-05-05 06:20:00
11 [报告]
发表于 2013-09-28 13:06 |只看该作者
回复 10# justu78

我只看出,你主要处理不符合要求的,大量的精力放在和你无关的需求上。如果你不能转变观念,只关注符合你需求的,你这个程序将无限期的复杂下去。


   

论坛徽章:
0
12 [报告]
发表于 2013-09-28 14:34 |只看该作者
回复 9# justu78

楼主,如果从代码里,去理解你要解决的问题,确实有点困难。另外,第二种情形下,匹配出的不合法部分应该是哪个?


   

论坛徽章:
0
13 [报告]
发表于 2013-09-28 21:29 |只看该作者
本帖最后由 justu78 于 2013-09-28 21:59 编辑
104359176 发表于 2013-09-28 13:06
回复 10# justu78

我只看出,你主要处理不符合要求的,大量的精力放在和你无关的需求上。如果你不能转变 ...

我怎么不是处理符合要求的了?我用的模式就是逐个找出符合要求的,最后只剩下不符合要求的,我觉得你没看明白我要找出什么东西,我要的是一个个合法等式,合法等式不只是你说的\w+\s*=\s*\d+, 请你仔细看看我的代码例子(我实际的代码对取出的合法等式要做其他处理,我这里省去了),我想表达的意思完全在那段正则表达式里面,可能我的代码用的模式在某个地方有问题,可以运行,没有语法错误,只是不能完全工作正常,对某些合法模式不能按照我预期抓出来而已,这是我来请教的原因,但是这个正则表达式完全不影响阅读我的意图。符合要求的等式就那么几种,但是不符合要求的情况是非常非常多,我不可能像你说的那样去处理不合法等式的,这是个很直观的原则。谢谢。

论坛徽章:
0
14 [报告]
发表于 2013-09-28 21:41 |只看该作者
本帖最后由 justu78 于 2013-09-28 21:54 编辑
onepublic 发表于 2013-09-28 14:34
回复 9# justu78

楼主,如果从代码里,去理解你要解决的问题,确实有点困难。另外,第二种情形下,匹配 ...

你指的是你说的a  = 1 =2这个情况吧,很明显a = 1是合法的,最后剩下 = 2
我要做的事情非常简单,从一个长的字符串中,找出一个合法的等式,等式的左边是由字母数字下划线组成的名字,所以我用(\w+)\s*=\s*来匹配等式的左边直到等号,然后等号的右边是裸数字,或者用括号,单引号,双引号之一来包围的数字,左右的括号的方向和个数肯定要匹配吧,这是最基本的数学知识,括号可以不只有一个,因为(1) 和((1))和(((1)))都是合法的,但是单引号或者双引号是我的程序的特别要求,也可以用来包围数字,但是个数只能有一个,左右也必须匹配: ‘1’和"1"都是可以,但是'1"和和""1"和"""1'等等都是错的。最后,如果有合法的符号包围数字,在数字的左右也可以有任意的空格,比如:( 1     )  和'     1'和“   1   ",我把规则应该都說得很清楚了啊

求职 : 软件工程师
论坛徽章:
3
程序设计版块每日发帖之星
日期:2015-10-07 06:20:00程序设计版块每日发帖之星
日期:2015-12-13 06:20:00程序设计版块每日发帖之星
日期:2016-05-05 06:20:00
15 [报告]
发表于 2013-09-28 22:08 |只看该作者
回复 13# justu78

你的正则都用到这种程度了,Perl 的现有特性已经不能满足你的需要了。真是前无古人,后无来者。

   

论坛徽章:
0
16 [报告]
发表于 2013-09-28 22:25 |只看该作者
104359176 发表于 2013-09-28 22:08
回复 13# justu78

你的正则都用到这种程度了,Perl 的现有特性已经不能满足你的需要了。真是前无古人, ...

我个人觉得perl的正则非常有意思,尤其是他的各种扩展形式及其嵌套,处理文本的确很强大,但是很多书上对正则表达讲得不深入,其实大骆驼书上讲正则,一些例子更奇怪,要花时间仔细研究才能搞明白运行原理,可能我用得还是有些问题,我如果要求那些规则只在一个正则表达式里面全部匹配,应该必须要用到扩展模式,不过现在我还没完全成功。实在不行我就换其他办法了,只是比较琐碎,成功的代码是有了。我目前只是想看看能不能用一个正则处理所有的情况,我感觉应该可以,可惜水平不够。

论坛徽章:
3
CU十二周年纪念徽章
日期:2013-10-24 15:41:34子鼠
日期:2013-12-14 14:57:19射手座
日期:2014-04-25 21:23:23
17 [报告]
发表于 2013-09-28 23:21 |只看该作者
其实和正则无关。。你的需求我看不懂。。。让你举出多一点的文本出来,,你就放了那几个最简单的例子 ,,让大家去想其他复杂的情况。。
  想解决问题很简单 ,,问大家都能看懂的问题。。。多一点特殊情况的样例出来
这样大家才能帮到你{:3_196:}

论坛徽章:
3
未羊
日期:2013-11-18 15:17:06酉鸡
日期:2013-12-06 17:07:16天蝎座
日期:2014-06-11 12:37:07
18 [报告]
发表于 2013-09-29 00:03 |只看该作者
回复 17# mcshell


    能不能把你写正则的经验写篇文章出来?

    在论坛里面我一直都觉得你是正则牛B的一类人...

论坛徽章:
3
CU十二周年纪念徽章
日期:2013-10-24 15:41:34子鼠
日期:2013-12-14 14:57:19射手座
日期:2014-04-25 21:23:23
19 [报告]
发表于 2013-09-29 09:02 |只看该作者
本帖最后由 mcshell 于 2013-09-29 09:04 编辑

回复 18# 墨迹哥


    多看几遍《精通正则表达式》,perlre
             声明:我并不是喜欢看书,只是遇到问题才查资料,不知不觉 就看完了。我的经验就是多遇问题,在多看书。不遇到问题,我看书真会睡着。
问题哪里找? CU有很多嘛,别人回答了,你也可以在换个思路写嘛{:3_202:} 。
我也是菜鸟,跟到大牛后面,偷着学习的{:3_183:}

论坛徽章:
0
20 [报告]
发表于 2013-09-29 11:01 |只看该作者
回复 14# justu78


    如果是a = 12 = 3。 ,会认为是 (a=1)(2=3)都是合法的部分么?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP