2011-06-17 88 views
0

試圖修復這個正則表達式。它應該在字符串中找到任何超鏈接,並在它們周圍放置錨標籤。保持回來,未知的標識符'+'。我認爲加歌是正則表達式的一部分?php preg_replace返回未知修飾符'+'?

<?php 

//replace links with clickable links 

// match protocol://address/path/ 
$comments = preg_replace("[a-zA-Z]+://([.]?[a-zA-Z0-9_/-])*", "<a href=\"\\0\">\\0</a>", $comments); 

// match www.something 
$comments = preg_replace("(^|)(www([.]?[a-zA-Z0-9_/-])*)", "\\1<a href=\"http://\\2\">\\2</a>", $comments); 

?> 

任何幫助表示讚賞。

回答

-1

嘗試更換由delimiters需要

"[a-zA-Z]+://([.]?[a-zA-Z0-9_/-])*", "<a href=\"\\0\">\\0</a>" 

r'[a-zA-Z]+://([.]?[a-zA-Z0-9_/-])*', '<a href=\"\\0\">\\0</a>' 
+2

這將是一個語法錯誤:PHP does not有一個正則表達式文字。 – NikiC 2011-06-17 10:53:21

7

一個PCRE模式(這是你給什麼preg_replace)被封閉:

~[a-zA-Z]+://([.]?[a-zA-Z0-9_/-])*~ 

這裏~是分隔符。我使用了這個char,因爲它不會出現在正則表達式的其餘部分。

解釋錯誤:PCRE認爲[是分隔符(因爲第一個字符總是分隔符)。因此,當它發現相應的結束分隔符]被認爲是修飾符之後的所有內容。由於沒有+修飾符,你會得到一個錯誤;)

+0

謝謝先生。一個我認爲正則正則表達式已經足夠困難了,現在我不得不挖苦PCRE,哈哈 – SlickRick 2011-06-17 10:53:47

相關問題