免费注册 查看新帖 |

Chinaunix

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

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

论坛徽章:
0
21 [报告]
发表于 2013-09-29 11:03 |只看该作者
本帖最后由 justu78 于 2013-09-29 11:13 编辑
mcshell 发表于 2013-09-28 23:21
其实和正则无关。。你的需求我看不懂。。。让你举出多一点的文本出来,,你就放了那几个最简单的例子 ,,让 ...

我的天,我说了很多次了啊,难道你看不懂我的正则表达式吗?我的所有意图都在里面了。。。。还看不懂,那我再说一次:
1)一个字符串,可长,可短,可以含有任何东西!
2)我需要从中获取合法的等式,等式规则如下:
    a)等式必须要有等号=,这没疑问吧?
    b)等号=的左边是以字母数字下划线定义的东西,该玩意和等号之间可以有任意空格,等号右边也可以有任意空格,所以 \w+\s*=\s* 必须有!!!!,其他统统错误
    c) 等号=的右边是一个数字,我这里只以整数为例子(实际中我有另外一个变量,变量的内容也是一个正则,来表达对各种整数,小数,浮点,科学计数。。的匹配),这个数字的两边可以有,也可以没有定界符号,所以裸数字也合法,比如 =\s*\d+
   d)数字两边的定界符有三种:括号(左括号,右括号),单引号,双引号。允许使用引号的原因是我最后用于分析计算这个合法等式的软件可以识别这种定义。
     数字两边的括号必须方向匹配,没疑问吧  象 (5( 这样的玩意我想地球上没有任何语言软件会认为表示数字3。除了括号的方向匹配之外,个数也必须匹配,因为 ((3))和 (3)都是合法的数字3。
    数字两边的单引号或者双引号也必须匹配, 但是数目只能是0或者1。
     所以我使用了('|"|\(*)?,但是我这后来考虑,这种模式不是很好阅读,用(['"]?|\(*)可读性更好。
   e)数字和左右两边的定界符也可以有任意的空格,因为(    3     )也是合法的。所以有('|"|\(*)?\s*\d+\s*
   f)最后,比较麻烦的是如何设定右边定界符的模式,因为右边定界符的模式需要根据左边定界符模式的匹配结果来确定,所以我使用了正则表达式的扩展(??{if($2){if($2=~m#\(#){'\)'x length $2}else{"$2"}}})),这里$2是什么意思大家应该都清楚,是左边定界符的匹配结果,然后判断,如果左边定界符发现了左括号,就生成同样长度的右括号模式,否则直接用$2的值作为右边定界符模式
   g)最后,因为原始字符串会很长,可能还有很多合法的等式以及其他一些不合法的,或者乱七八糟的东西,合法等式后面可以有另一个合法等式,也可以有不合法的或者奇怪的其他东西,他们之间必须至少有一个空格。另外合法等式也可能正好处于字符串的结尾,而且字符串的结尾也可以包含双斜杠\\做为下一个字符串的连续符号,所以最后我使用(\s+|\s*(\\\\)?\s*$)
以上我解释了我的正则的含义,希望你能看懂了。我举的代码是非常简单的一段,只是用于该正则测试而已。
我有另外的方案解决以上的问题,只是不能在一个正则里处理,需要对原字符串做若干次预处理。不过我希望如果能一个正则搞定是最好,这是我来这里咨询的原因。谢谢。

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

如果1和2之间有空格,那就是合法的,否则非法。因为合法的数字内部之间不能有空格。
sinian126 该用户已被删除
23 [报告]
发表于 2013-09-29 17:33 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
24 [报告]
发表于 2013-09-29 21:38 |只看该作者
sinian126 发表于 2013-09-29 17:33
这种匹配 都用不着perl 下个notepad++就能解决,可视化的几个正则就完成了回复 6# justu78

问题是这只是我的程序很小的一个功能,我不是只处理某个字符串就完了的哦,,还有别的很多工作要做,分析字符串只是必要的一步而已.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP