免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1698 | 回复: 8
打印 上一主题 下一主题

求助正则表达式 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-04-08 11:28 |只看该作者 |倒序浏览
文本中有若干表达式,每个形如:
y = a1 ^ a2 ^ a3 ^ a4 ^ a5 ......每个表达式的项数不一。请问,我想将这些表达式用括号括起来,如何实现。
举例:  y = a1 ^ a2 ^ a3 ^ a4 ^ a5  ^ a6 ^ a7 ^ a8 ==》 y = ((a1 ^ a2) ^ (a3 ^ a4)) ^( (a5  ^ a6) ^ (a7 ^ a)
请问用正则怎么实现?
或者用其他方法如何实现?谢谢啊~~

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
2 [报告]
发表于 2009-04-08 11:47 |只看该作者
用 regexp

  1. s/(\w+\s*\^\s*\w+)/($1)/g;
  2. s/(=\s*)(.*)$/$1($2)/;
复制代码

论坛徽章:
0
3 [报告]
发表于 2009-04-08 13:53 |只看该作者
楼上这样做,可以给每两项加上括号,不错的idea;
但如果是要针对这样的情况呢: 每两项之间都需要用括号括起来,当然括号中的只算一项。比如:
y = a1 ^ a2 ^ a3 ^ a4 ^ a5  ^ a6 ^ a7 ^ a_8 ,按照楼上的做法,是不是该是这样子:
y = (a1 ^ a2) ^ (a3 ^ a4) ^ (a5  ^ a6) ^ ( a7 ^ a_8 )
这里,(a1 ^ a2) ,(a3 ^ a4) ,(a5^a6),(a7^a_8 ) 分别算做一项,所以,仍旧需要用括号将他们两两括起来。如果有落单的一项,就不用括。就变成了这样:
y =( (a1 ^ a2) ^ (a3 ^ a4) ) ^ ( (a5  ^ a6) ^ ( a7 ^ a_8 ) )
假设还有一项落单的话,比如a^9,就不用括。
y =( (a1 ^ a2) ^ (a3 ^ a4) ) ^ ( (a5  ^ a6) ^ ( a7 ^ a_8 ) ) ^ a9

这样的话,上面的答案好象做不到,怎么改进可以做到呢?谢谢

[ 本帖最后由 逝去的华丽 于 2009-4-8 13:55 编辑 ]

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
4 [报告]
发表于 2009-04-08 14:03 |只看该作者
原帖由 逝去的华丽 于 2009-4-8 13:53 发表
楼上这样做,可以给每两项加上括号,不错的idea;
但如果是要针对这样的情况呢: 每两项之间都需要用括号括起来,当然括号中的只算一项。比如:
y = a1 ^ a2 ^ a3 ^ a4 ^ a5  ^ a6 ^ a7 ^ a_8 ,按照楼上的做 ...

这样的话我就采用终极解决方案:根据 y 的值自己构造一个 AST,然后按照需要的格式打印这个 AST

论坛徽章:
0
5 [报告]
发表于 2009-04-08 19:23 |只看该作者
虾米是 AST。。。初学PERL,见谅。。

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
6 [报告]
发表于 2009-04-08 23:10 |只看该作者
原帖由 逝去的华丽 于 2009-4-8 19:23 发表
虾米是 AST。。。初学PERL,见谅。。

Abstract syntax tree

BTW, 没学过编译原理?

论坛徽章:
0
7 [报告]
发表于 2009-04-08 23:48 |只看该作者
原帖由 MMMIX 于 2009-4-8 23:10 发表

Abstract syntax tree

BTW, 没学过编译原理?


你太牛叉了~

论坛徽章:
0
8 [报告]
发表于 2009-04-09 10:00 |只看该作者
确实没学过 编译原理,菜啊~~~~~~~~~~~~~~~~~~:((

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
9 [报告]
发表于 2009-04-09 10:26 |只看该作者
原帖由 逝去的华丽 于 2009-4-9 10:00 发表
确实没学过 编译原理,菜啊~~~~~~~~~~~~~~~~~~:((

那就去学。

BTW,你整的这些都是哪来的?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP