Php 正则表达式模式仅匹配不带www的链接
我正在尝试只搜索没有Php 正则表达式模式仅匹配不带www的链接,php,regex,expression,html-parsing,Php,Regex,Expression,Html Parsing,我正在尝试只搜索没有wwwlikehttp://google.com,或https://facebook.com,等等。然后我想将www添加到同一个链接,使其成为http://www.google.com,或https://www.facebook.com等 然而,我的模式有一个问题(我使用的模式可以获得所有有或没有www的链接) $text='blablablabla'; preg\u match \u all(“/]*href=(\”?)([^\“>]*?)\\1[^>]*>(.*)/siU
www
likehttp://google.com
,或https://facebook.com
,等等。然后我想将www
添加到同一个链接,使其成为http://www.google.com
,或https://www.facebook.com
等
然而,我的模式有一个问题(我使用的模式可以获得所有有或没有www的链接)
$text='blablablabla';
preg\u match \u all(“/]*href=(\”?)([^\“>]*?)\\1[^>]*>(.*)/siU“,$text,$matches);
foreach($old\u url与[2]匹配)
{
$text=str_replace($old_url“,$new_url“,$text);
}
以下是带有的示例代码:
$re=“/bla bla bla bla bla\n”;
打印($str.“\n”);
$str=preg\u replace\u回调(
$re,
函数($matches){
返回str_replace($matches[2],“www.”$matches[2],$matches[0]);
},
$str
);
印刷品($str);
输出:
<a href="http://www.google.com">google</a> bla bla bla <a href="https://www.google.com">google</a> bla bla bla <a href="http://www.facebook.com">facebook</a>
bla-bla-bla-bla-bla
< /代码> 我会考虑使用<强> DOM和<强> XPath < /强>来处理这个问题。
$doc = new DOMDocument;
@$doc->loadHTML($html);
$xpath = new DOMXPath($doc);
$links = $xpath->query('//a[not(contains(@href, "www."))]/@href');
foreach ($links as $link) {
// process yours urls by $link->nodeValue
...
...
}
然后,在处理url时,您可能可以使用parse_url()
进行替换。这种模式有什么问题?@JayBlanchard(我使用的这种模式可以获取有或没有www的所有链接)我只搜索没有www
的链接来为相同的linkthanx添加它,但效果不好,如果您尝试使用$text='blablablablablablablabla'
和print$matches[2]
您只有一个链接,但必须有两个链接。@Omardalo:我同意,贪婪的(.*)
有问题。我用(.*?
)替换了它,它工作正常。thanx brother现在工作得很好,你能帮我用结果替换它吗,在我得到没有www的链接后(我想在这个链接中添加www)foreach($link[2]匹配为$link){$str=str\u替换($link,$link\u with\u www,$str);}
@omardealo:Done,请看一看。thanx兄弟太多了,但很抱歉我不能理解你的代码,你能解释一下吗,就像这是我的var内容$this->post['message']
我怎么能用你的代码来使用它。是的,我已经更改了,我的意思是在str\u replace
行中使用了$this->post['message']
,对吗<代码>$this->post['message']=str_replace($url['host'],'www.$url['host'],$this->post['message'])如果你的文本有两个相同的链接,比如http://google.com 布拉布拉http://google.com
第一个链接可以,但第二个链接类似于http://www.www.google.com/
如果有三个链接,将添加更多的www
<a href="http://www.google.com">google</a> bla bla bla <a href="https://www.google.com">google</a> bla bla bla <a href="http://www.facebook.com">facebook</a>
$doc = new DOMDocument;
@$doc->loadHTML($html);
$xpath = new DOMXPath($doc);
$links = $xpath->query('//a[not(contains(@href, "www."))]/@href');
foreach ($links as $link) {
// process yours urls by $link->nodeValue
...
...
}