PHP-提取href和text的正则

小组事务管理 小组事务管理 主题:974 回复:1955

PHP-提取href和text的正则

归属感 发布于 2016-12-21 字数 301 浏览 1005 回复 3

目前用的这个正则 <[a|A][^<>]href="([^"]+)"[^<>]>([^<>]+)</[a|A]>
可以匹配出诸如

<a href="url1.html">text1</a>
<a href="url1.html" target="_blank">text1</a>
<a class="c1" href="url1.html">text1</a>

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

支持 Markdown 语法,需要帮助?

评论(3

虐人心 2017-09-01 3 楼

正则也有些问题,改了一下,中间的a标签之间的所有内容一次性匹配出来,然后用php的strip_tags去掉html标签,就剩下内容了,代码如下

 <?php
$str = '<a href="url1.html"><span>text1</span></a>';
$reg = '#<a[^<>]+href="([^"]+)"[^<>]*>(.+?)</a>#i';
preg_match($reg,$str,$match);
var_dump(strip_tags($match[2]));
?>

灵芸 2017-06-21 2 楼

php

 preg_match_all('%<a[sS]?href="([^"]+)[^>]+>([sS]?)</a>%', $subject, $result, PREG_PATTERN_ORDER);
for ($i = 0; $i < count($result[0]); $i++) {

Matched text = $result[0][$i];

// 采用如果下函数去除多余的html标签
// strip_tags($text);
}

javascript

 var myregexp = /<a[sS]?href="([^"]+)[^>]+>([sS]?)</a>/g;
var match = myregexp.exec(subject);
while (match != null) {
// matched text: match[0]
// match start: match.index
// capturing group n: match[n]
match = myregexp.exec(subject);
}

java

 try {
Pattern regex = Pattern.compile("<a[\s\S]?href="([^"]+)[^>]+>([\s\S]?)</a>");
Matcher regexMatcher = regex.matcher(subjectString);
while (regexMatcher.find()) {
// matched text: regexMatcher.group()
// match start: regexMatcher.start()
// match end: regexMatcher.end()
}
} catch (PatternSyntaxException ex) {
// Syntax error in the regular expression
}

归属感 2017-02-12 1 楼

<[aA][^<>]href="([^"]+)"[^<>]>([^<>]+)</[aA]>
<[aA][^<>]href="([^"]+)"[^<>]>([^<>])?([^<][^aA][^>])([^<>]+)([^<]/[^aA][^>])?([^<>])?</[aA]>
貌似[]中 不用|分割选项 括号中才用的

这点 记住 至于是不是特定版本的实现就不太清楚了 我解释下中间替换的意义

([^<>])?([^<][^aA][^>])([^<>]+)([^<]/[^aA][^>])?([^<>])?
([^<>])?可以为除了<>之外的任意字符出现0-无数次
([^<]/[^aA][^>])不允许出现<a>
([^<>]+)?可以为除了<>之外的任意字符出现1-无数次
([^<]/[^aA][^>])? 不允许出现<a>
([^<>]
)?可以为除了<>之外的任意字符出现0-无数次