免费注册 查看新帖 |

Chinaunix

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

用PERL如何正确配对双括号和叁括号?如:{{{postcode|{{post_tel|p281}}}}} [复制链接]

论坛徽章:
3
2015亚冠之阿尔希拉尔
日期:2015-08-15 16:33:2215-16赛季CBA联赛之四川
日期:2016-01-03 13:37:0515-16赛季CBA联赛之四川
日期:2016-06-13 15:53:36
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-01-31 22:35 |只看该作者 |倒序浏览
本帖最后由 minirain 于 2015-01-31 23:07 编辑

用PERL如何正确配对双括号和叁括号,如:{{{postcode|{{post_tel|p281}}}}}应正则匹配成:
1、Template1={{post_tel|p281}};
2、{{{postcode|Template1}}}
这样才是正确的。
如下是错误的:
1、Template2 = {{{postcode|{{post_tel|p281}}};
2、Template2}}。
****************************
有人说用 .*贪婪性,$xx=~s/\{\{\{(.*)\}\}\}/($a=$1,$a=^\{\{[^\{\}]+\}\}^Template1^g,$a)/g;
可字符串中有很多这样的:{{{postcode|{{post_tel|p281}}}}} {{{AA|{{bb|cc}}{{dd|ee123}}}}}   {{{55|66 77{{88|99}}  {{...|......}}}}}
这时就不能用.*来贪婪匹酏了!!!
请大侠出招。
minirain

论坛徽章:
1
程序设计版块每日发帖之星
日期:2015-10-07 06:20:00
2 [报告]
发表于 2015-02-01 07:56 |只看该作者
不知楼主需求,能否先简化问题?

比如,弄个计数器,同时创建一个工作变量。 从左向右substr。出现左括号时+1, 出现右括号-1.
每次计数器==0 时,把工作变量处理一下。

论坛徽章:
3
2015亚冠之阿尔希拉尔
日期:2015-08-15 16:33:2215-16赛季CBA联赛之四川
日期:2016-01-03 13:37:0515-16赛季CBA联赛之四川
日期:2016-06-13 15:53:36
3 [报告]
发表于 2015-02-01 09:39 |只看该作者
chenhao392 发表于 2015-02-01 07:56
不知楼主需求,能否先简化问题?

比如,弄个计数器,同时创建一个工作变量。 从左向右substr。出现左括号 ...

简化问题如下:
双括号内容(用正则捕获)调用其实现函数:$y = ~s/\{\{([^\{\}]+)\}\}/&Bracket2($1)/ge ;
叁括号内容(用正则捕获)调用另一函数实现其功能:$z = ~s/\{\{\{([^\{\}]+)\}\}\}/&Bracket3($1)/ge ;
对于你说的双括号(或叁括号)单一情况可以用计数解决匹配问题:
{{A..{{B..b}} C..{{D..{{E..e}}F.. d}} a}}括号阶度为3即{{E..e}}为第3阶可以用计数器解决
同样,单一有叁括号情况:
{{{A..{{{B..b}}} C..{{{D..{{{E..e}}}F.. d}}} a}}}也可以用计数器解决,
但是双括号与叁括号混合时,就比较难解决,因为叁括号{{{A..  {{B..b}}}}}可能被误认为是双括号即{{{(A.. {{B..b}}})}}对于最后结尾'}}}}}'是前3'}}}'后2'}}',还是前2'}}'后3'}}}',正则表达式无法分清楚。
以上内容,不知我描绘清楚了吧?
谢谢各位大侠多出招!
minirain

论坛徽章:
1
程序设计版块每日发帖之星
日期:2015-10-07 06:20:00
4 [报告]
发表于 2015-02-05 03:49 |只看该作者
回复 3# minirain


    你要匹配这个干嘛?说下需求。
    说不定不用RE.

    然后,有多少种不同的case? 3个套2个,2个套3个,就这两种case?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP