正则表达式获取 url 值 <a href="" ...</a>

时间:2021-05-06 00:15:14

标签: php regex

html 输出:

<a href="/projects/dorabotka-internet-magazina-na-openkart-3-1310872.html" target="_blank" title="Название">
                                                    <span title="Поднят" data-toggle="tooltip">
                                <i class="fa fa-angle-double-up"></i>
                            </span>
                                                Доработка интернет магазина на опенкарт 3                       </a>

我不工作的 PHP 代码:

$terms = $doc_element->find('h2 a')->htmlOuter();
$terms = preg_filter('#<a href=\"(.)\".*$#is', "$1", $terms);
return $terms;

第 2 行中的正则表达式有问题。

我需要获取 url 的值,丢弃其他所有内容并将其放在 url 之前:https://example.com 以结束:https://example.com/projects/dorabotka-internet-magazina-na-openkart-3-1310872.html

1 个答案:

答案 0 :(得分:0)

你可以使用

if (preg_match('#<a(?:\s+[^>]*?)?\s+href=["\']\K[^\'"]*#', $text, $match)) {
  echo 'https://example.com' . $match[0];
}

参见regex demo

详情

  • <a - <a 文本
  • (?:\s+[^>]*?)? - 一个可选的序列
    • \s+ - 一个或多个白点
    • [^>]*? - 除 > 之外的零个或多个字符尽可能少
  • \s+ - 一个或多个空格
  • href=["\'] - href= 然后是 "'
  • \K - 匹配重置运算符,丢弃目前匹配的所有文本
  • [^\'"]* - 除 '" 之外的零个或多个字符。