免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: 昭襄王
打印 上一主题 下一主题

请教匹配图片地址的正则 [复制链接]

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
11 [报告]
发表于 2010-10-07 10:54 |只看该作者
什么都不确定,怎么写?
有什么是确定的?
况且又要求是PHP的正则,各种工具之间的正则表达式都有差别。
ly5066113 发表于 2010-10-07 09:55



    确定的是<img >中肯定有src="xxx",php的正则支持posix和pcre(Perl-Compatible Regular Expressions) 两种风格。
例如下面的函数用到的正则是perl兼容的。
找到$str中所有<img alt="xxx" src="xxx" whtaever="xxx">标签,作为数组元素写入数组$match
  1. preg_match_all('/<img\s[^>]*>/',$str,$match);
复制代码
现在我想知道怎么写正则直接获得img里面的src部分(只要""里面的xxx)

论坛徽章:
23
15-16赛季CBA联赛之吉林
日期:2017-12-21 16:39:27白羊座
日期:2014-10-27 11:14:37申猴
日期:2014-10-23 08:36:23金牛座
日期:2014-09-30 08:26:49午马
日期:2014-09-29 09:40:16射手座
日期:2014-11-25 08:56:112015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:0315-16赛季CBA联赛之山东
日期:2017-12-21 16:39:1915-16赛季CBA联赛之广东
日期:2016-01-19 13:33:372015亚冠之山东鲁能
日期:2015-10-13 09:39:062015亚冠之西悉尼流浪者
日期:2015-09-21 08:27:57
12 [报告]
发表于 2010-10-07 11:25 |只看该作者
  1. ly5066113@ubuntu:~$ cat test.pl
  2. #! /usr/bin/perl

  3. my $str = q(<img alt="xxx" src="xxx.jpg" whtaever="xxx">);
  4. print "$2\n" if $str =~ /<img\s[^>]*src=(["'])([^"']+)$1/;
  5. ly5066113@ubuntu:~$ ./test.pl
  6. xxx.jpg
复制代码

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
13 [报告]
发表于 2010-10-07 12:05 |只看该作者
回复 12# ly5066113


    多谢!
小小改了一下,适应php,可以工作。
  1. $reg = "/<img\s[^>]*src=([\"\'])([^\"\']+)/";
  2. preg_match_all ($reg,$lines,$match);
  3. print_r($match[2]);
复制代码
$match[0]和$match[1]是别的东西。还能修正吗?
Array
(
    [0] => Array
        (
            [0] => <img border="0" title="简评" alt="简评作" src="http://images2.china.com/65421900.jpg
            [1] => <img border="0" title="简评" alt="简评作" src="http://images2.china.com/65421901.jpg
            [2] => <img border="0" title="简评" alt="简评作" src="http://images2.china.com/65421900.jpg
            [3] => <img border="0" title="简评" alt="简评作" src="/china.com/65421901.jpg
        )

    [1] => Array
        (
            [0] => "
            [1] => "
            [2] => "
            [3] => "
        )

    [2] => Array
        (
            [0] =>
            [1] =>
            [2] =>
            [3] => /china.com/65421901.jpg
        )

)

论坛徽章:
23
15-16赛季CBA联赛之吉林
日期:2017-12-21 16:39:27白羊座
日期:2014-10-27 11:14:37申猴
日期:2014-10-23 08:36:23金牛座
日期:2014-09-30 08:26:49午马
日期:2014-09-29 09:40:16射手座
日期:2014-11-25 08:56:112015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:0315-16赛季CBA联赛之山东
日期:2017-12-21 16:39:1915-16赛季CBA联赛之广东
日期:2016-01-19 13:33:372015亚冠之山东鲁能
日期:2015-10-13 09:39:062015亚冠之西悉尼流浪者
日期:2015-09-21 08:27:57
14 [报告]
发表于 2010-10-07 13:18 |只看该作者
回复 13# 昭襄王


没看懂什么意思。

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
15 [报告]
发表于 2010-10-07 13:45 |只看该作者
回复 14# ly5066113


    这个函数返回的$match是一个二维数组,完美匹配的情况下应该这样:
print_r($match);
  1. Array
  2. (
  3.     [0] => Array
  4.         (
  5.             [0] => http://images2.china.com/65421900.jpg
  6.             [1] => http://images2.china.com/65421901.jpg
  7.             [2] => http://images2.china.com/65421900.jpg
  8.             [3] => /china.com/65421901.jpg
  9.         )

  10. )
复制代码
现在,出现了
  1. Array
  2. (
  3.     [0] => Array
  4.         (
  5.             [0] => <img border="0" title="简评" alt="简评作" src="http://images2.china.com/65421900.jpg
  6.             [1] => <img border="0" title="简评" alt="简评作" src="http://images2.china.com/65421901.jpg
  7.             [2] => <img border="0" title="简评" alt="简评作" src="http://images2.china.com/65421900.jpg
  8.             [3] => <img border="0" title="简评" alt="简评作" src="/china.com/65421901.jpg
  9.         )

  10.     [1] => Array
  11.         (
  12.             [0] => "
  13.             [1] => "
  14.             [2] => "
  15.             [3] => "
  16.         )

  17.     [2] => Array
  18.         (
  19.             [0] => http://images2.china.com/65421900.jpg
  20.             [1] => http://images2.china.com/65421901.jpg
  21.             [2] => http://images2.china.com/65421900.jpg
  22.             [3] => /china.com/65421901.jpg
  23.         )

  24. )
复制代码
使用的时候区别不大,但是有不该出现的东西。

论坛徽章:
23
15-16赛季CBA联赛之吉林
日期:2017-12-21 16:39:27白羊座
日期:2014-10-27 11:14:37申猴
日期:2014-10-23 08:36:23金牛座
日期:2014-09-30 08:26:49午马
日期:2014-09-29 09:40:16射手座
日期:2014-11-25 08:56:112015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:0315-16赛季CBA联赛之山东
日期:2017-12-21 16:39:1915-16赛季CBA联赛之广东
日期:2016-01-19 13:33:372015亚冠之山东鲁能
日期:2015-10-13 09:39:062015亚冠之西悉尼流浪者
日期:2015-09-21 08:27:57
16 [报告]
发表于 2010-10-07 13:54 |只看该作者
回复 15# 昭襄王

看起来:
0 是匹配的整个字符串
1 是第一个括号里的内容
2 是第二个括号里的内容

这样试试:

$reg = /(?:<img\s[^>]*src=["'])[^"']+/

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
17 [报告]
发表于 2010-10-07 14:21 |只看该作者
回复 16# ly5066113

不行。直接空值了。
    刚才看了一下文档,看到老外的正则末尾有"is",试了一下,成功了。只输出了一个一维数组。但我不知道为什么。还是得RTFM啊
再次感谢Tim
  1. $reg = "/<img\s[^>]*src=([\"\'])([^\"\']+)/is";
  2. preg_match_all ($reg,$lines,$match);
  3. print_r($match[2]);
复制代码
  1. Array
  2. (
  3.     [0] => http://images2.china.com/65421900.jpg
  4.     [1] => http://images2.china.com/65421901.jpg
  5.     [2] => http://images2.china.com/65421900.jpg
  6.     [3] => /china.com/65421901.jpg
  7. )
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP