使用PHP从字符串中提取URL

Azr*_*ard 33 php url

我们如何使用PHP来识别字符串中的URL并将它们存储在数组中?

explode如果URL包含逗号,则无法使用该函数,它不会给出正确的结果.

aam*_*dia 83

REGEX是您的问题的答案.采用对象操纵器的答案...所有它缺少的是排除"逗号",所以你可以尝试这个排除它们的代码并给出3个分离的URL作为输出:

$string = "The text you want to filter goes here. http://google.com, https://www.youtube.com/watch?v=K_m7NEDMrV0,https://instagram.com/hellow/";

preg_match_all('#\bhttps?://[^,\s()<>]+(?:\([\w\d]+\)|([^,[:punct:]\s]|/))#', $string, $match);

echo "<pre>";
print_r($match[0]); 
echo "</pre>";
Run Code Online (Sandbox Code Playgroud)

而输出是

Array
(
    [0] => http://google.com
    [1] => https://www.youtube.com/watch?v=K_m7NEDMrV0
    [2] => https://instagram.com/hellow/
)
Run Code Online (Sandbox Code Playgroud)

  • 也许你想通过添加`i`修饰符来使它不区分大小写.即.`...#i'` (4认同)

Obj*_*tor 5

您可以在这里尝试正则表达式:

$string = "The text you want to filter goes here. http://google.com, https://www.youtube.com/watch?v=K_m7NEDMrV0,https://instagram.com/hellow/";

preg_match_all('#\bhttps?://[^\s()<>]+(?:\([\w\d]+\)|([^[:punct:]\s]|/))#', $string, $match);

echo "<pre>";
print_r($match[0]); 
echo "</pre>";
Run Code Online (Sandbox Code Playgroud)

这给出了以下输出:

Array
(
  [0] => http://google.com
  [1] => https://www.youtube.com/watch?v=K_m7NEDMrV0,https://instagram.com/hellow/
)
Run Code Online (Sandbox Code Playgroud)

  • 输出数组中应该有 3 个结果。不是 2.`http://google.com`、`https://www.youtube.com/watch?v=K_m7NEDMrV0` 和 `https://instagram.com/hellow/` (4认同)

小智 5

请尝试使用以下正则表达式

$regex = '/https?\:\/\/[^\",]+/i';
preg_match_all($regex, $string, $matches);
echo "<pre>";
print_r($matches[0]); 
Run Code Online (Sandbox Code Playgroud)

希望这对你有用