返回所有匹配单词的数组

时间:2016-10-19 20:16:27

标签: php

我有一个函数可以替换任何看起来像是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
)

1 个答案:

答案 0 :(得分:0)

试试这个:

preg_match_all('/((http|https):\/\/[^\s'"]+)[\s"\<\>\\`\{\|\}\^]*/', $str, $matches);

$ matches将是嵌套的匹配数组。你应该迭代它并只得到[1]元素。