在给定文本上使用'www'获取所有单词或网址

问题描述:

我需要在给定文本上使用'www'获取所有单词或网址。这是我到目前为止所尝试的。在给定文本上使用'www'获取所有单词或网址

<?php 
$needle = 'www'; 
$sentence = 'This www.google.com is the http://www.facebook.com website that https://www.amazon.com make me awesome'; 

echo $needle . "<br />"; 
echo $sentence . "<br /><br />"; 

if(preg_match('/\b(' . preg_quote($needle, '/') . '\w+)/', $sentence, $match)){ 
    echo "<pre>"; 
     print_r($match); 
    echo "</pre>"; 
} 
?> 

我期待的输出值的数组:

www.google.com 
http://www.facebook.com 
https://www.amazon.com 

,但目前,我的代码不能正常工作,输出一个空数组。请帮我解决这个问题。谢谢。

+0

它不返回“空阵”,你的'preg_match'不返回任何truthy。 – pvg

+0

谢谢你的回复,我明白了,你是对的。我的正则表达式是错误的。你会建议一些工作吗? – Kris

试试这个,我相信你会得到你想要的结果

$sentence = 'This www.google.com is the http://www.facebook.com website that https://www.amazon.com make me awesome'; 
$pattern = '@((https?://)?([-\\w]+\\.[-\\w\\.]+)+\\w(:\\d+)?(/([-\\w/_\\.]*(\\?\\S+)?)?)*)@'; 

preg_match_all($pattern, $sentence, $matchFound); 

echo '<pre>'; 
print_r($matchFound[0]); 

输出

Array 
(
    [0] => www.google.com 
    [1] => http://www.facebook.com 
    [2] => https://www.amazon.com 
) 

我觉得你并不需要一个正则表达式在这里,最好避免它们,所以如果这对你有用。

既然你只需要一段文字,如果它有针(在这种情况下,www),那么你可以拆分字符串一个空的空间,然后通过检查一个片段是否包含针。如果是这样,将其添加到另一个数组:

<?php 
$needle = 'www'; 
$sentence = 'This www.google.com is the http://www.facebook.com website that https://www.amazon.com make me awesome'; 
$pieces = explode(" ", $sentence); 
$urls = []; 
$urls = array_filter($pieces, function($v) use($needle) { 
    return stripos($v, $needle) !== false; 
}); 
var_dump($urls); 

/* result */ 
array(3) { 
    [1]=> 
    string(14) "www.google.com" 
    [4]=> 
    string(23) "http://www.facebook.com" 
    [7]=> 
    string(22) "https://www.amazon.com" 
} 

Demo

使用模式\S*www\S*Demo

\ S匹配任何非空白字符(等于[^ \ r \ n \吨\ F])

*量词 - 零和无限时间之间匹配,多次尽可能地,用之于需要

$needle = 'www'; 
$sentence = 'This www.google.com is the http://www.facebook.com website that https://www.amazon.com make me awesome'; 

echo $needle . "<br />"; 
echo $sentence . "<br /><br />"; 

if(preg_match('/\S*('.preg_quote($needle, '/').'\S*)/', $sentence, $match)){ 
    echo "<pre>"; 
     print_r($match); 
    echo "</pre>"; 
} 
+0

谢谢你的最短但工作的答案!与*乌斯曼的回答相比,使用你的答案有什么好处吗? – Kris

+0

我的正则表达式模式工作得更快,可以用'$ needle'用于不同的单词。 –