【问题标题】:regular expression to parse image url from a html code从 html 代码中解析图像 url 的正则表达式
【发布时间】:2015-01-24 21:51:23
【问题描述】:

大家好,我编写了一个模块来创建一些文章并正确地对它们进行 css 处理,我想从文章内容中解析图像。我首先想到的是正则表达式。直到 3 小时我才开始阅读有关 regexp 的教程,并制作了一个对我来说似乎还不错的模式。

$pattern='^src\="images\/([a-zA-Z]+|[0-9]+)+([a-zA-Z]*|[0-9]*)*\.[jpg|png|bmp|gif]"$';
$regstring=$introtext;
preg_match($pattern,$regstring,$matches);
var_dump($matches);

输入:

<p>ASDADSDSASADSADSASDADSDSASADSADSASDADSDSASA</p>
<p><img src="images/authentic.jpg" alt="authentic" /></p>
<p>SASDADSDSASADSADSASDADSDSASADSADS</p>

我在 stackoverflow 中发现了很多与我完全不同的现成模式,我不想只是复制一些我不知道它们做什么的行。另外我发现十分钟前我可以用 DOM 做到这一点html ,但我很固执地让它与 regexpr 一起工作,所以我可以了解更多关于它的东西。 有人可以帮我找出我的错误吗? 感谢您的宝贵时间。

【问题讨论】:

  • 不要使用正则表达式,使用 DOM ...
  • 正如我已经提到的,我想先用正则表达式来实现它,所以我不会浪费我所有的阅读
  • 你的模式有很多错误。 1) 你没有delimiters2) 你的替换应该在一个类中,即[a-zA-Z0-9]+ 并且放在组之外的量词()+ 应该被删除。 3) 你不能在一个字符类中使用整个单词,所以你应该用一个组替换最后一个类,即(?:jpg|png|bmp|gif)。祝你好运。
  • 我能问一下 ?: 代表什么吗?
  • 是的,它是一个非捕获组。您可以阅读有关分组构造的信息here

标签: regex html-parsing preg-match


【解决方案1】:
src="images\/[a-zA-Z0-9]+\.(?:jpg|png|bmp|gif)"

你可以试试这个。你的正则表达式的简单版本。查看演示。

http://regex101.com/r/oE6jJ1/36

【讨论】:

  • ~^src\="images\/[a-zA-Z0-9]+[a-zA-Z0-9]*\.(?:jpg|png|bmp|gif) "$~ 这是我在 @hwnd 的帮助下编写的代码,所以 "=" 不需要用 / 转义?也感谢您的回答。
  • @IseNgaRt 尝试使用其他输入的演示站点以了解更多信息。请参阅右侧的说明。
  • 不要教别人做错事,谢谢。正则表达式在这里不是正确的工具!
  • @sputnick OP 说他这样做是为了学习。我没有发现任何错误
  • 这就像教渔夫用火箭筒捕鱼一样。当然它有点“有效”,但它不是发现 REGEX 的好主题。
【解决方案2】:
$pattern='/(?<=[\'\"])[\w\/-]+[.]{1}[a-zA-Z]{3,4}(?=[\'\"])/i';
$regstring=$introtext;
preg_match_all($pattern,$regstring,$matches);
var_dump($matches[0]);

你可以在这里看到它是如何工作的:http://regex101.com/r/eV6gE4/1

【讨论】:

    【解决方案3】:

    使用适当的解决方案,并且请在安装perl module WWW::Mechanize 时停止杀死kitties(每次尝试使用正则表达式解析HTML,都会杀死kittie),命令mech-dump 变得可用:

    $ mech-dump --images http://stackoverflow.com/questions/27151348
    http://i.stack.imgur.com/qF63b.jpg?s=32&g=1
    //cdn.sstatic.net/stackoverflow/img/apple-touch-icon.png
    http://i.stack.imgur.com/nyAHT.jpg?s=32&g=1
    /posts/27151348/ivc/677a
    http://pixel.quantserve.com/pixel/p-c1rF4kxgLUzNc.gif
    

    【讨论】:

    • 之前从未听说过这种机械化,尽管它看起来很复杂。我必须为此安装一个模块吗?因为我的模块适用于 joomla cms 是否适用于 joomla 开发?
    猜你喜欢
    • 2012-10-21
    • 2010-12-24
    • 2013-01-03
    • 2011-03-20
    • 1970-01-01
    • 2017-11-09
    • 2010-12-21
    • 2021-01-16
    • 1970-01-01
    相关资源
    最近更新 更多