首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >获取A元素的href属性

获取A元素的href属性
EN

Stack Overflow用户
提问于 2010-09-29 18:18:15
回答 8查看 98.9K关注 0票数 117

正在尝试查找页面上的链接。

我的正则表达式是:

代码语言:javascript
复制
/<a\s[^>]*href=(\"\'??)([^\"\' >]*?)[^>]*>(.*)<\/a>/

但是看起来失败了

代码语言:javascript
复制
<a title="this" href="that">what?</a>

如何更改正则表达式以处理未放在a标记中的href?

EN

回答 8

Stack Overflow用户

发布于 2010-09-29 19:43:03

我同意戈登的观点,你必须使用HTML解析器来解析HTML。但是如果你真的想要一个正则表达式,你可以试试这个:

代码语言:javascript
复制
/^<a.*?href=(["\'])(.*?)\1.*$/

这与字符串开头的<a匹配,然后是任意数量的字符(非贪婪) .*?,然后是href=,最后是由"'包围的链接

代码语言:javascript
复制
$str = '<a title="this" href="that">what?</a>';
preg_match('/^<a.*?href=(["\'])(.*?)\1.*$/', $str, $m);
var_dump($m);

输出:

代码语言:javascript
复制
array(3) {
  [0]=>
  string(37) "<a title="this" href="that">what?</a>"
  [1]=>
  string(1) """
  [2]=>
  string(4) "that"
}
票数 19
EN

Stack Overflow用户

发布于 2010-09-29 18:22:24

您要查找的模式将是链接锚模式,如(something):

代码语言:javascript
复制
$regex_pattern = "/<a href=\"(.*)\">(.*)<\/a>/";
票数 4
EN

Stack Overflow用户

发布于 2010-09-29 18:21:13

你为什么不直接匹配

代码语言:javascript
复制
"<a.*?href\s*=\s*['"](.*?)['"]"

<?php

$str = '<a title="this" href="that">what?</a>';

$res = array();

preg_match_all("/<a.*?href\s*=\s*['\"](.*?)['\"]/", $str, $res);

var_dump($res);

?>

然后

代码语言:javascript
复制
$ php test.php
array(2) {
  [0]=>
  array(1) {
    [0]=>
    string(27) "<a title="this" href="that""
  }
  [1]=>
  array(1) {
    [0]=>
    string(4) "that"
  }
}

这是可行的。我刚刚删除了第一个捕获大括号。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3820666

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档