免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
论坛 程序设计 Perl 找标签
最近访问板块 发新帖
查看: 3535 | 回复: 9

找标签 [复制链接]

论坛徽章:
307
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
发表于 2016-06-02 22:34 |显示全部楼层
本帖最后由 sunzhiguolu 于 2016-06-03 09:01 编辑

我看了篇帖子, 内容如下:
<xml>
asjdf<b>B</b><strong><a></a></a>kajs
asdj<ab>bfkfk
456456<fdgsfg>fghdfgh

5ASDsd<1234234>sdft<123er><abc>56<aaa>4e</abc></123er>
ajsfk

ssfd<sdfsd><abc><abc><aaa></abc>
</xml>

<xml> </xml> 不必处理;
不必考虑跨行问题;

帖子的要求是将 非对称的标签显示出来, 大家有啥好的方法 还请大家指点, 谢谢大家... (同一行的标签显示在同一行中)

论坛徽章:
307
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
发表于 2016-06-02 23:29 |显示全部楼层
我将帖子的内容做了一点小的修改, 好了就这样了. 谢谢大家...

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
发表于 2016-06-03 10:48 |显示全部楼层
回复 1# sunzhiguolu

xmllint utility

$ xmllint err.xml 2>&1 | grep -A1 "mismatch"
err.xml:2: parser error : Opening and ending tag mismatch: strong line 2 and a
asjdf<b>B</b><strong><a></a></a>kajs
--
err.xml:6: parser error : Opening and ending tag mismatch: aaa line 6 and abc
5ASDsd<1234234>sdft<123er><abc>56<aaa>4e</abc></123er>
--
err.xml:6: parser error : Opening and ending tag mismatch: abc line 6 and unparseable
5ASDsd<1234234>sdft<123er><abc>56<aaa>4e</abc></123er>
--
err.xml:9: parser error : Opening and ending tag mismatch: aaa line 9 and abc
ssfd<sdfsd><abc><abc><aaa></abc>
--
err.xml:10: parser error : Opening and ending tag mismatch: abc line 9 and xml
</xml>



评分

参与人数 1信誉积分 +10 收起 理由
sunzhiguolu + 10 哈哈, 还是您这个好使!!!

查看全部评分

论坛徽章:
307
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
发表于 2016-06-03 10:56 |显示全部楼层
回复 3# jason680
谢谢您指点, 又学了一手!

   

论坛徽章:
307
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
发表于 2016-06-03 17:43 |显示全部楼层
本帖最后由 sunzhiguolu 于 2016-06-03 17:46 编辑

我先来一个, 如果大家有其他的解决方案 还请大家指点...
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;

  4. while (<>){
  5.     next if (m~</?xml>~ or /\A\s*\z/);
  6.     my ($line, @aData) = ($_);
  7.     while (m~<([^/>]+)>~g){
  8.         push (@aData, "<$1>") if (!($line =~ s!</$1>!!));
  9.     }
  10.     push (@aData, $_) for ($line =~ m~</[^>]+>~g);
  11.     print "@aData\n" if (@aData);
  12. }
复制代码
perl abc.pl abc
------------------------------------------------------------------------------
<strong> </a>
<ab>
<fdgsfg>
<1234234> <aaa>
<sdfsd> <abc> <aaa>

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
发表于 2016-06-03 18:19 |显示全部楼层
回复 5# sunzhiguolu


Here you are if you like it ...

$ perl -lane '{next if(m/^\s*$|xml>/);next if(!m/</);s/^[^<]+?</</;s/>.*?</></g;s/>[^>]+?$/>/;while(s|<([^>]+)>(.*?)</\1>|$2|g){};print}' err.xml
<strong></a>
<ab>
<fdgsfg>
<1234234><aaa>
<sdfsd><abc><aaa>

   

评分

参与人数 1信誉积分 +10 收起 理由
sunzhiguolu + 10 太赞了!!!

查看全部评分

论坛徽章:
307
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
发表于 2016-06-03 19:53 |显示全部楼层
回复 6# jason680
您这一步一步的, 弄得太精巧了!!!

   

论坛徽章:
6
15-16赛季CBA联赛之新疆
日期:2016-03-22 22:34:5915-16赛季CBA联赛之山东
日期:2016-04-11 09:08:41程序设计版块每日发帖之星
日期:2016-06-28 06:20:00程序设计版块每日发帖之星
日期:2016-07-19 06:20:00每日论坛发贴之星
日期:2016-07-19 06:20:0015-16赛季CBA联赛之青岛
日期:2016-07-20 22:44:17
发表于 2016-06-04 00:23 |显示全部楼层
换个思路:
$>  cat aa |perl -01npe ' s/(^|>).*?</\1 </gs while (s:<(\w+?)>(.*?R?.*?)</(\1)>:\2:gs);'
<strong> </a> <ab> <fdgsfg> <1234234> <aaa> <sdfsd> <abc> <aaa>

评分

参与人数 1信誉积分 +10 收起 理由
sunzhiguolu + 10 很给力!

查看全部评分

论坛徽章:
307
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
发表于 2016-06-04 00:31 |显示全部楼层
本帖最后由 sunzhiguolu 于 2016-06-04 00:50 编辑

回复 8# RE_HASH
向大神学习, 谢谢指点.


   

论坛徽章:
307
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
发表于 2016-10-08 10:54 |显示全部楼层
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;

  4. while (<DATA>){
  5.     next if (/\A(<\/?xml>|\s*\z)/ or !/>/);
  6.     my @aErr;
  7.     while (s/(<(\/?)([^>]+)>)//){
  8.         my $del = $1;
  9.         my $lbl = $2 ? "<$3>" : "</$3>";
  10.         push (@aErr, $del) if (!s/$lbl//);
  11.     }
  12.     print "@aErr\n";
  13. }


  14. __DATA__
  15. <xml>
  16. asjdf<b>B</b><strong><a></a></a>kajs
  17. asdj<ab>bfkfk
  18. 456456<fdgsfg>fghdfgh

  19. 5ASDsd<1234234>sdft<123er><abc>56<aaa>4e</abc></123er>
  20. ajsfk

  21. ssfd<sdfsd><abc><abc><aaa></abc>
  22. </xml>
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP