【问题标题】:RegEx matching for HTML and non-HTML URLs正则表达式匹配 HTML 和非 HTML URL
【发布时间】:2019-04-22 16:08:58
【问题描述】:

我正在尝试从此文本中获取所有网址。绝对和相对 URL,但我没有得到正确的正则表达式。这个表达结合了比我想要的更多的东西。你得到了我不想要的 HTML 标记和其他信息。

尝试

(\w*.)(\\\/){1,}(.*)(?![^"])

输入

<div class=\"loader\">\n       <div class=\"loaderImage\"><img src=\"\/c\/Community\/Rating\/img\/loader.gif\" \/><\/div>\n    <\/div>\n<\/div>\n<\/div><\/span><\/span>\n
   <a title=\"Avengers\" href=\"\/pt\/movie\/Avengers\/57689\" >Avengers<\/a>                                                                                                                        <\/div>\n         
<img title=\"\" alt=\"\" id=\"145793\" src=\"https:\/\/images04-cdn.google.com\/movies\/74932\/74932_02\/previews\/2\/128\/top_1_307x224\/74932_02_01.jpg\" class=\"tlcImageItem img\"  width=\"307\"   height=\"224\"  \/>
pageLink":"\/pt\/videos\/\/updates\/1\/0\/Category\/0","previousPage":"\/pt\/videos\/\/updates\/1\/0\/Category\/0","nextUrl":"\/pt\/videos\/\/updates\/2\/0\/Category\/0","method":"updates","type":"scenes","callbackJs"
<span class=\"value\">4<\/span>\n        <\/div>\n          <\/div>\n    <div class=\"loader\">\n       <div class=\"loaderImage\"><img src=\"\/c\/Community\/Rating\/img\/loader.gif\" \/><\/div>\n    <\/div>\n<\/div>\n<\/div><\/span><\/span>

Demo

【问题讨论】:

  • 你的字符串中真的有所有这些反斜杠吗?
  • Regex 不适合解析 HTML 文本。使用Dom Document
  • @Toto 是的,我有所有这些反斜杠。
  • @vivek_23 这不是html是json
  • @BrunoAndrade 所以你先json_decode()。您将获得 HTML。

标签: html regex pcre


【解决方案1】:

正如已经评论的那样,使用 RegEx 解决这个问题可能并不是最好的主意。但是,如果你想练习或者你真的必须练习,你可以在你的 URL 所在的"" 之间进行精确匹配。您可以使用scrhref 或您可能拥有的任何其他固定组件从左侧绑定它们。您可以简单地使用 | 并将它们列在第一组 ()

用于 HTML URL 的 RegEx 1

This RegEx 可能不是正确的解决方案,但它可能会让您了解如何使用 RegEx 解决此问题:

(src=|href=)(\\")([a-zA-Z\\\/0-9\.\:_-]+)(")

它创建了四个组,以便简化更新,$3 组可能是您想要的 URL。您可以在第三组中添加您的 URL 可能包含的任何字符。

适用于 HTML 和非 HTML URL 的 RegEx 2

对于捕获其他非 HTML 的 URL,您可以将其更新为类似于 this RegEx:

(src=\\|href=\\|pageLink\x22:|previousPage\x22:|nextUrl\x22:)(")([a-zA-Z\\\/0-9\.\:_-]+)(") 

其中\x22 代表",你可以简单地替换它。我刚刚添加了\x22,这样你就可以看到那些",你的目标URL 位于:

第二个RegEx也有四个组,目标组是$3。如果您愿意,也可以简化或DRY

【讨论】:

  • 这个表达式几乎是完美的但无法获取位于:pageLink":"\/pt\/videos\/\/updates\/1\/0\/Category\/0 中的链接","previousPage":"\/pt\/videos\/\/updates\/1\/0\/Category\/0","nextUrl":"\/pt\/videos\/\/updates\/ 2\/0\/类别\/0"
猜你喜欢
  • 2019-06-04
  • 2011-02-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多