2017-03-12 4 views
0

を無視し、既存のハイパーリンクは、テキストがリンクとして考えられている変換ハイパーリンクに「のみ」のプレーンテキストが、私は、ハイパーリンクに無地のリンクを変換する必要がありますが、プレーンテキストのみを変換するために、既存のハイパーリンク

をスキップする必要があります場合:

  1. は、行の先頭に開始し、またはそれは すなわち(^|\s)
  2. HTMLハイパーリンクまたはその他のHTMLタグ内含まれていないの前にスペースが既存の すなわち[^"|']
  3. は、行の終わりで終了またはスペースは、それ


https://link1 http://link2 

<-a href="http://ignored">http:-ignored<-/a> 

後に存在するリンク式は次のとおりです。他のオプションはただの、すなわち考慮せずに

((?:https?://|ftps?://|www\.).*) 

http後のテキスト...

- 変換するハイパーリンクはpla

:テキストが代わりにリンクを一致させるために .*を使用しての

答えて

0

に失われますので、リンクして、再度変換する再に私はスペースまたは引用符ではない1文字以上を意味する [^\s"\']+を使用したい、許可されていません
$str = <<<EOD 
https://link1 http://link2 

<-a href="http://ignored">http:-ignored<-/a> 
EOD; 

$str = preg_replace('~(?:^|\s)((?:https?://|ftps?://|www\.)[^\s"\']+)(?:\s|$)~', '<a href="$1">$1</a>', $str); 
echo $str,"\n"; 

出力:

<a href="https://link1">https://link1</a><a href="http://link2">http://link2</a> 
<-a href="http://ignored">http:-ignored<-/a> 

あなたはリンクの前または後にあるスペースを維持したい場合

$str = preg_replace('~(^|\s)((?:https?://|ftps?://|www\.)[^\s"\']+)(\s|$)~', '<a href="$2">$1$2$3</a>', $str); 
+0

スペースは歓迎です。リンクは空白を無視したくないので、スペースは無視されません。 –

+0

@SherifEldeeb:編集を参照してください。 – Toto

+0

この$ strを試してください http://google.com http://facebook.com –

関連する問題