2017-03-07 2 views
0

正規表現はあまりよくありません。http(s)とタグなしのURLを照合する正規表現パターン

私は何をしようとしていますか?私はすべてのURLを特別な文字列にマッチさせたい。

基本的に、すべてのURLに一致させて、<a> - タグを除いて<a> - タグで囲んでいます。例えば

、以下の文字列が一致する必要があります。

ハロー!私はここにテキストをクリックしています、それは多くのURLを持っています のURL www.aon.at?this=trueとwww.aon.at.

ハロー:すべてが一致する必要がありますどのようなaon.at/this?true

のために働いて 正しくhttp://www.aon.atとも一致させる必要があります!私は、URL www.aon.at?this=true www.aon.at をたくさん を持つテキスト<のhref = 'www.aon.at'>ここ</A>をクリックし、しています。私はページhttps://regex101.com/Linkify Regex Function PHP Daring Fireball Method

(?i)\b((?:[a-z][\w-]+:(?:\/{1,3}|[a-z0-9%])|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}\/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'".,<>?«»“”‘’])) 

から正規表現を試してみましたが、それはないすべて正しくhttp://www.aon.atを を一致させる必要があるとも

aon.at/this?true のために働きます私がそれがしたいと思うように働いています。ご覧のとおり、正規表現は<a> - Tagと一致していますが、削除方法はわかりません。

enter image description here

答えて

0

ネヴァーマインドは、すでに解決策を見つけました。そのソリューションで

は、すべてが正常に動作し

$pattern = '(?xi)\b((?:https?://|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`\!()\[\]{};:\'".,<>?«»“”‘’]))';  
return preg_replace("!$pattern!i", "<a href=\"\\0\" rel=\"nofollow\" target=\"_blank\">\\0</a>", $str);