【问题标题】:Check if there's an URL between span tags检查 span 标签之间是否有 URL
【发布时间】:2012-12-24 07:23:56
【问题描述】:

我得到一个包含以下内容的 HTML 代码:

<span rel="url">example.com</span>
<span rel="url">example.net.pl [SOMETHING]</span>
<span rel="url">[SOMETHING]imjustanexample.com</span> [..]

问题是,是否有办法从span 标签之间获取“url”字符串。例如。它应该得到以下内容:example.comexample.net.pl(没有[SOMETHING] 字符串)和imjustanexample.com

我想我将不得不为此使用正则表达式。

【问题讨论】:

  • 恐怕你需要给出更具体的例子,因为到目前为止你的字符串不包含任何网址。
  • 你说得对,我不是指那些example.com 的..
  • 让我换一种说法,[something] 可以是什么? example.com 不是网址!一个网址是http://example.com/
  • @Jack 我知道! [something] 可以是任何字符串 - 不是真正的括号。

标签: php regex string


【解决方案1】:

在 javascript 中试试这个正则表达式,

/((http|https):\/\/(\w+:{0,1}\w*@)?(\S+)|)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/

从 span 标签验证文本

【讨论】:

    【解决方案2】:

    我会这样(无论是正则表达式还是只是 PHP 代码,如您所愿):

    1. 找到下一个“”
    2. 从结尾到下一个(但不包括)空格 或小于号&lt;(以先到者为准)。
    3. 重复直到不再匹配为止。

    完成。如果正则表达式对你来说太复杂,你也可以使用字符串函数http://php.net/strings

    【讨论】:

      【解决方案3】:

      应该工作:

      $str = '<span rel="url">http://google.ca</span>';
      $match = preg_match('#<span(.*)?>((http|https|ftp)://(\S*?\.\S*?))(\s|\;|\)|\]|\[|\{|\}|,|"|\'|:|\<|$|\.\s)</span>#i', $str, $matches);
      if($match)
          var_dump($matches);
      else
          echo 'Nope<br />';
      

      正则表达式来自:https://stackoverflow.com/a/206087/1533203

      【讨论】:

        【解决方案4】:

        查看简单的 HTML Dom 解析器 (here)。

        有了它,您可以简单地访问 DOM 树上的元素。

        您的问题可以通过以下方式解决:

          $html->find("span[rel=url]");
        

        然后您可以简单地在所有元素上使用循环和一些适合您需要的正则表达式。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-12-06
          • 1970-01-01
          • 2010-11-24
          • 2013-05-30
          • 1970-01-01
          相关资源
          最近更新 更多