免费注册 查看新帖 |

Chinaunix

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

正则疑问 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-08-05 16:00 |只看该作者 |倒序浏览
大家好!请问如何用正则把格式1中的内容替换为格式2中的内容,谢谢!
格式1
<embed type="application/x-shockwave-flash" height="400" width="500"
src=" http://static.youku.com/v1.0.011 ... edid=-&showAd=0"
pluginspage=" http://www.macromedia.com/go/getflashplayer" wmode="transparent"
document.document.form1.="hight"></embed>

格式2
<embed id="movie_player" name="movie_player"
src="http://player.youku.com/player.php/sid/XMTY3MzIwMTY/v.swf" quality="high" width="500" height="400" align="middle"
allowScriptAccess="sameDomain" type="application/x-shockwave-flash"></embed>

论坛徽章:
0
2 [报告]
发表于 2010-08-05 16:02 |只看该作者
喂 你稍微描述一下好不

论坛徽章:
0
3 [报告]
发表于 2010-08-05 16:08 |只看该作者
不好意思,我想把
<embed type="application/x-shockwave-flash" height="400" width="500"
src=" http://static.youku.com/v1.0.011 ... edid=-&showAd=0"
pluginspage=" http://www.macromedia.com/go/getflashplayer" wmode="transparent"
document.document.form1.="hight"></embed>

替换为
<embed id="movie_player" name="movie_player"
src="http://player.youku.com/player.php/sid/XMTY3MzIwMTY/v.swf" quality="high" width="500" height="400" align="middle"
allowScriptAccess="sameDomain" type="application/x-shockwave-flash"></embed>

论坛徽章:
1
狮子座
日期:2013-12-16 16:09:24
4 [报告]
发表于 2010-08-05 16:15 |只看该作者
  1. undef $/;
  2. my $html=<>;
  3. my $from=<<'END';
  4. <embed type="application/x-shockwave-flash" height="400" width="500"
  5. src=" http://static.youku.com/v1.0.011 ... edid=-&showAd=0"
  6. pluginspage=" http://www.macromedia.com/go/getflashplayer" wmode="transparent"
  7. document.document.form1.="hight"></embed>
  8. END
  9. my $to=<<'END';
  10. <embed id="movie_player" name="movie_player"
  11. src="http://player.youku.com/player.php/sid/XMTY3MzIwMTY/v.swf" quality="high" width="500" height="400" align="middle"
  12. allowScriptAccess="sameDomain" type="application/x-shockwave-flash"></embed>
  13. END
  14. $html=~s/$from/$to/gs;
复制代码

论坛徽章:
0
5 [报告]
发表于 2010-08-05 16:37 |只看该作者
本帖最后由 黑色阳光_cu 于 2010-08-05 17:20 编辑
  1. #!/bin/env perl

  2. use strict;
  3. use warnings;

  4. my @order = qw(id name src quality width height align allowScriptAccess type);

  5. local $/ = "\n\n";
  6. while (my $html = <DATA>)
  7. {
  8.         my %nodes =
  9.         (
  10.                 id => "movie_player",
  11.                 name => "movie_player",
  12.                 src => undef,,
  13.                 quality => "high",
  14.                 width => undef,
  15.                 height => undef,
  16.                 align => "middle",
  17.                 allowScriptAccess => "sameDomain",
  18.                 type => undef
  19.         );

  20.         while ($html =~ /(\w+)\s*=\s*(['"])?\s*((?(2)(?:(?!\2).)*|\S*))\s*(?(2)\2)/g)
  21.         {
  22.                 # print "$1 => $3\n";
  23.                 $nodes{$1} = $3;
  24.         }

  25.         if ($nodes{src} =~ /VideoIDS=(\w+)/i)
  26.         {
  27.                 $nodes{src} = "http://player.youku.com/player.php/sid/$1/v.swf";
  28.         }

  29.         $html = "<embed ";
  30.         foreach my $key (@order)
  31.         {
  32.                 $html .= qq($key="$nodes{$key}" );
  33.         }

  34.         local $/ = " ";
  35.         chomp $html;
  36.         $html .= "></embed>";
  37.         print $html;
  38.         print "\n\n";
  39. }

  40. __DATA__
  41. <embed type="application/x-shockwave-flash" height="400" width="500"
  42. src=" http://static.youku.com/v1.0.0115/v/swf/qplayer.swf?VideoIDS=XMTY3MzIwMTY=&isAutoPlay=true&embedid=-&showAd=0"
  43. pluginspage=" http://www.macromedia.com/go/getflashplayer" wmode="transparent"
  44. document.document.form1.="hight"></embed>

  45. <embed menu="true" type="application/x-shockwave-flash"
  46. src="http://static.youku.com/v1.0.0025/v/swf/qplayer.swf?VideoIDS=XMTgyODM2MzI4&amp;winType=interior&amp;isShowRelatedVideo=false&amp;showAd=0"
  47. width="470" height="350" play="true" loop="True"></embed>

  48. <embed pluginspage="http://www.macromedia.com/go/getflashplayer"
  49. src="http://static.youku.com/v1.0.0115/v/swf/qplayer.swf?VideoIDS=XMTQ4OTU4NDg=&isAutoPlay=true&embedid=-&showAd=0"" width="500" height="400"
  50. type="application/x-shockwave-flash" wmode="transparent" document.document.form1.="hight"></embed>

  51. <embed allowfullscreen="true" bgcolor="#000000" type="application/x-shockwave-flash" height="480" width="600"
  52. src="http://static.youku.com/v1.0.0025/v/swf/qplayer.swf?VideoIDS=XMTkwNjQxNTM2&amp;winType=interior&amp;isShowRelatedVideo=false&amp;showAd=0"></embed>

  53. <embed document.document.form1.="hight" wmode="transparent" type="application/x-shockwave-flash" height="400" width="500"
  54. src="http://player.youku.com/player.php/Type/Folder/Fid/1263594/Ob/1/Pt/289/sid/XMTg4NzM4MjQ=/v.swf"
  55. pluginspage="http://www.macromedia.com/go/getflashplayer"></embed>

  56. <embed type="application/x-shockwave-flash" height="500" width="600" src="http://player.youku.com/player.php/sid/XNjkxOTcyNjg=/v.swf"></embed>

  57. <embed menu="true" type="application/x-shockwave-flash"
  58. src="http://static.youku.com/v1.0.0025/v/swf/qplayer.swf?VideoIDS=XMTgyODM2MzI4&amp;winType=interior&amp;isShowRelatedVideo=false&amp;showAd=0"
  59. width="470" height="350" play="true" loop="True"></embed>
复制代码

论坛徽章:
78
双子座
日期:2013-10-15 08:50:09天秤座
日期:2013-10-16 18:02:08白羊座
日期:2013-10-18 13:35:33天蝎座
日期:2013-10-18 13:37:06狮子座
日期:2013-10-18 13:40:31双子座
日期:2013-10-22 13:58:42戌狗
日期:2013-10-22 18:50:04CU十二周年纪念徽章
日期:2013-10-24 15:41:34巨蟹座
日期:2013-10-24 17:14:56处女座
日期:2013-10-24 17:15:30双子座
日期:2013-10-25 13:49:39午马
日期:2013-10-28 15:02:15
6 [报告]
发表于 2010-08-05 17:04 |只看该作者
。。。

论坛徽章:
0
7 [报告]
发表于 2010-08-05 17:54 |只看该作者
  1. #!/usr/bin/perl -w
  2. use 5.010;
  3. $v1 = '<embed id="movie_player" name="movie_player" src="http://player.youku.com/player.php/sid/';
  4. $v2 = '/v.swf" quality="high" ';
  5. $v3 = 'align="middle" allowScriptAccess="sameDomain" type="application/x-shockwave-flash"></embed>';

  6. while (<>) {
  7.         chomp;
  8.         given ( $_ ) {
  9.                 when ( $_ ~~ /.*VideoIDS=(.*?)[^a-zA-Z0-9].*/ ) { $tmp1 = $1;continue }
  10.                 when ( $_ ~~ /.*(width.*height.*?\s|height.*width.*?\s).*/ )    { $tmp2 = $1 }
  11.                         }
  12.         print "$tmp1 --------  $tmp2\n";
  13.         print "$v1$tmp1$v2$tmp2$v3\n";
  14. }
复制代码
输出结果是2行 。。 请问下是哪里出问题了

论坛徽章:
1
天蝎座
日期:2014-02-28 16:08:53
8 [报告]
发表于 2010-08-05 18:01 |只看该作者
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP