免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2204 | 回复: 6

请教 perl 如何使用 带 子表达式的 正则 [复制链接]

论坛徽章:
0
发表于 2017-05-25 11:03 |显示全部楼层
本帖最后由 david_95 于 2017-05-25 13:50 编辑

有xml 文件,想要用正则抽取相应的文本

  <row>
    <attribute name="groupName">
        <value>SUPERGROUP</value>
    </attribute>
    <attribute name="sidName">
        <value>PDCProspectPerson.readHomePageDetails</value>
    </attribute>
    <attribute name="lastWritten">
        <value/>
    </attribute>
  </row>
  <row>
    <attribute name="groupName">
        <value>HEALTHCARECOORDINATIONGROUP</value>
    </attribute>
    <attribute name="sidName">
        <value>PDCProspectPerson.readHomePageDetailsForModify</value>
    </attribute>
    <attribute name="lastWritten">
        <value>2016-11-22-15.35.01</value>
    </attribute>
  </row>


我定义了个函数,想传入参数来 用正则获取文本
$para="groupName";
$tmp="<(attribute) name=\"".${para}."\".*?</\\1>";
if($aRow = ~/\Q($tmp)\E/mgs){
      print $1;
}

总是无法取得期望的
      <attribute name="groupName">
        <value>HEALTHCARECOORDINATIONGROUP</value>
    </attribute>

求助大侠们,这个带子表达式的正则,该怎么写

论坛徽章:
0
发表于 2017-05-25 15:17 |显示全部楼层
回复 1# david_95

这个带子?应该如何选择带子?

论坛徽章:
0
发表于 2017-05-25 15:20 |显示全部楼层
错了3处:

1) 不应该使用\Q \E;
2) \1应该写成\2;
3) '=~' 是一个运算符,中间不能有空格;

论坛徽章:
0
发表于 2017-06-04 07:48 |显示全部楼层
十分感谢@大米白面

论坛徽章:
0
发表于 2017-06-04 16:18 |显示全部楼层
只要是可正常Parse的xml,我一般都不建议用regex来处理,代码健壮性可扩展性不好。去了解一下XML::LibXML吧,很好用的。

论坛徽章:
0
发表于 2017-06-04 19:06 |显示全部楼层
本帖最后由 david_95 于 2017-06-04 19:10 编辑

安装 XML::LibXML 总失败,无法生成 makefile , 这也是我比较闹心的一件事,有些module 无法安装,我也不会调试。求推荐 perl build module 的书,或文章

论坛徽章:
0
发表于 2017-06-05 22:07 |显示全部楼层
回复 6# david_95

你用的难道是ActivePerl?

XML::LibXML会依赖libxml2。如果是Linux的话系统里有libxml2的话应该不会有什么问题,Windows上StrawberryPerl对这种常用第三方库的支持总的应该也还行。ActivePerl我就不知道了。。。



您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP