2011-07-22 22 views
0

私はこのRegexを使用して、単一のテキストリンクをHTMLリンクに変換しています。プレーンテキストではうまく動作しますが、誰かが適切なhtmlリンクやiframeなどを挿入するたびに、http:// preceededテキストを使用するとリンクになります。説明するために:Regex一重引用符または二重引用符ではありません

preg_replace('/([hf][tps]{2,4}:\/\/[^ \t\n\r]+[^ .\t,\n\r\(\)"\'])/', '<a href="$1">$1</a>', $string) 

は仕事になりますが、それは遺跡:

<a href='...'>... 

<iframe src='...'>...および他のすべての混乱を。

私が使用しようとしてきた:

^[^'"]*([hf][tps]{2,4}:\/\/[^ \t\n\r]+[^ .\t,\n\r\(\)"\'])$ 

しかし、それは作る:

juanito mario http://... 

を参照してください、

<a href="juanito mario http://...">juanito mario http://...</a> 
+1

のようなもの、実際のP​​HPコードがありません。 – hakre

+3

私はこれを読むことをお勧めします:http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags – murgatroid99

答えて

0

使用負の後読みと先読みアサーションになりますhttp://www.php.net/manual/en/regexp.reference.assertions.php

引用: (? <!foo)barは、 "foo"が先行していない "bar"のオカレンスを見つけます。 foo(?!bar)は、 "bar"の後に続く "foo"の任意の一致と一致します。

だからあなたの場合には

preg_replace('/(?<!["'])([hf][tps]{2,4}....(?!["'])/', ...) 
関連する問題