我正在尝试提取来自特定用户之后的所有链接,但是我的正则表达式仅获取一个链接:
HTML:
<div class="from_name">
USERNAME
</div>
<div class="media_wrap clearfix">
<div class="media clearfix pull_left media_photo">
<div class="fill pull_left">
</div>
<div class="text">
<a href="https://google.com</a>
</div>
</div>
<div class="text">
<a href="https://yahoo.com</a>
</div>
</div>
代码:
preg_match_all('/USERNAME[\s\S]*?href="(.*?)</', $data, $matches);
print_r($matches);
//输出,仅是caputre google.com:
Array
(
[0] => Array
(
[0] => FullCapture
[1] => Array
(
[0] => https://google.com
)
)
答案 0 :(得分:0)
不幸的是,我对电报信使并不熟悉。不,我几乎可以肯定,使用正则表达式无法(轻松)解决您的问题。该规则有太多例外。因此,我将提供2种选择:
使用适当的HTML解析器,丢弃您不需要的内容,捕获相关信息。
使用黑客
解析后,您将具有类似于以下内容的结构:
您可以使用字符串函数甚至正则表达式来进行解析和删除。
答案 1 :(得分:-1)
可以使用两个正则表达式吗?首先将整个区域与USERNAME匹配,然后将其与网址匹配。
preg_match('/(?<=USERNAME).*(?<=href=").*?</s', $string, $matches);
preg_match_all('/(?<=href=").*?(?=<)/', $matches[0], $newMatches);
var_dump($newMatches);
这给您:
array(1) {
[0]=>
array(2) {
[0]=>
string(18) "https://google.com"
[1]=>
string(17) "https://yahoo.com"
}
}