[問題] 自動超連結 正規表示式

看板Web_Design作者 (Azure)時間12年前 (2011/08/23 01:24), 編輯推噓1(107)
留言8則, 3人參與, 最新討論串1/2 (看更多)
假如我有一個字串 $str=' 一二三四http://www.google.com 五六七八<a href="http://www.google.com ">Google</a> '; 我希望能用正規表示式將所有超連結自動加上<a>的標籤 我的寫法是 if( strpos($str, "http") === true ){ $str = eregi_replace( '([[:space:]()[{}])(www.[-a-zA-Z0-9@:%_\+.~#?&//=]+)', '\1<a href="http://\2" rel="nofollow">\2</a>', $foo ); } 但現在遇到一個問題 假如一個字串中同時也有已經加上<a>標籤的網址 就會變成下面這樣 五六七八<a href="<a href="http://www.google.com "></a>">Google</a> 變成<a>標籤包住<a>標籤 有沒有辦法用正規表示式先判斷是否已經有<a>標籤 如果沒有再強迫加上<a>標籤呢? 感謝各位前輩 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.117.71.47

08/23 05:13, , 1F
regex 可以順便檢查後面的 pattern
08/23 05:13, 1F

08/23 05:21, , 2F
/pattern(?=next)/ 可以判斷 pattern 後面的東西
08/23 05:21, 2F

08/23 05:21, , 3F
/pattern(?!=next)/ 這是判斷後面非 next 的樣式
08/23 05:21, 3F

08/23 05:22, , 4F
可以利用這個去判斷網址是不是被包在 <a> 裡面
08/23 05:22, 4F
抱歉我試了很久都試不出來@@ 也google不到資料 可以請前輩再講詳細點嘛? 假如我的 $pattern='([[:space:]()[{}])(www.[-a-zA-Z0-9@:%_\+.~#?&//=]+)'; $next='<a +href="?([^"]+)"?>(.+)</a>'; 那我要怎麼寫呢? 還是說只有preg可以判斷?ereg不行呢 ※ 編輯: a517981 來自: 140.117.71.47 (08/23 14:23)

08/23 15:36, , 5F
(?<!href=")
08/23 15:36, 5F

08/23 15:37, , 6F
可以讓前面href="開頭的字串不符合規則
08/23 15:37, 6F

08/23 15:37, , 7F
google 反向預查
08/23 15:37, 7F

08/23 16:37, , 8F
我測試出來了!謝謝樓上兩位前輩
08/23 16:37, 8F
文章代碼(AID): #1EKf2tVP (Web_Design)
文章代碼(AID): #1EKf2tVP (Web_Design)