PHP-提取href和text的正则
目前用的这个正则 <[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>
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(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]));
?>
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
}
<[aA][^<>]href="([^"]+)"[^<>]>([^<>]+)</[aA]>
<[aA][^<>]href="([^"]+)"[^<>]>([^<>])?([^<][^aA][^>])([^<>]+)([^<]/[^aA][^>])?([^<>])?</[aA]>
貌似[]中 不用|分割选项 括号中才用的
这点 记住 至于是不是特定版本的实现就不太清楚了 我解释下中间替换的意义
([^<>])?([^<][^aA][^>])([^<>]+)([^<]/[^aA][^>])?([^<>])?
([^<>])?可以为除了<>之外的任意字符出现0-无数次
([^<]/[^aA][^>])不允许出现<a>
([^<>]+)?可以为除了<>之外的任意字符出现1-无数次
([^<]/[^aA][^>])? 不允许出现<a>
([^<>])?可以为除了<>之外的任意字符出现0-无数次