在给定文本上使用'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
,但目前,我的代码不能正常工作,输出一个空数组。请帮我解决这个问题。谢谢。
试试这个,我相信你会得到你想要的结果
$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"
}
使用模式\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>";
}
谢谢你的最短但工作的答案!与*乌斯曼的回答相比,使用你的答案有什么好处吗? – Kris
我的正则表达式模式工作得更快,可以用'$ needle'用于不同的单词。 –
它不返回“空阵”,你的'preg_match'不返回任何truthy。 – pvg
谢谢你的回复,我明白了,你是对的。我的正则表达式是错误的。你会建议一些工作吗? – Kris