2017-09-13 7 views
0

特定のテキストに 'www'を含むすべての単語またはURLを取得する必要があります。これはこれまで私が試したことです。特定のテキストに 'www'を含むすべての単語またはURLを取得する

<?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

答えて

1

私はあなたがここに正規表現を必要としないと思う、私はあなたが希望する結果

$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 
) 
2

を取得すると信じて、これを試してみてくださいそれを避けるのが最善ですこれがあなたのために働くならe。

ニードルが入っている場合(この場合は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

1

使用パターン\S*www\S*Demo。ゼロ無制限の時間との間の一致、何度でも -

\ Sは数量詞*

(に等しい[^ \ R \ n \ T \ 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

最短でもありがたい答えをいただきありがとうございます! Muhammad Usmanの答えと比べてあなたの答えを使う利点はありますか? – Kris

+0

私のregexパターンはより速く動作し、 '$ needle'で異なる単語に使用できます。 –

関連する問題