我有一个函数可以替换任何看起来像是php中的链接的单词。
例如
$str = "Please go check out this link http://example.com and http://anothersite.com";
$link_replace = convert_link($str);
function convert_link($txt){
$text = preg_replace('/(?i)\b((?:https?:\/\/|[a-z0-9-_]\d{0,3}[.]|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}\/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:\'".,<>?«»“”‘’]))/', '<a href="$1">$1</a>', $txt);
}
请我只想过滤链接的词并将它们放在一个数组中,所以我会有这个
$link_array = array('http://example.com', 'http://anothersite.com');
请问我该怎么做?
我尝试了preg_match()
preg_match('/(?i)\b((?:https?:\/\/|[a-z0-9-_]\d{0,3}[.]|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}\/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:\'".,<>?«»“”‘’]))/', $str, $txt);
print_r($txt);
但我只得到这个结果
Array(
[0] => http://example.com
[1] => http://example.com
)
答案 0 :(得分:0)
试试这个:
preg_match_all('/((http|https):\/\/[^\s'"]+)[\s"\<\>\\`\{\|\}\^]*/', $str, $matches);
$ matches将是嵌套的匹配数组。你应该迭代它并只得到[1]元素。