2009-06-26 46 views
0

我最近一直在使用PHP的簡單Twitter API,並且通過這段代碼使@username與twitter.com/username鏈接。不幸的是,這個代碼創建它,所以@用戶名鏈接到http://twitter.com/@username,導致錯誤。這個代碼有很多部分我不明白,例如^ \ v和其他(見下文)。任何人都可以給我解釋他們的意思嗎?preg_replace(),以及它的縮寫?

$ret = preg_replace('/(^|[^\w])(@[\d\w\-]+)/', '\\1<a href="http://twitter.com/$2">$2</a>' ,$ret); 
+0

http://www.phpro.org/tutorials/Introduction-to-PHP-Regex.html#30(小抄部分)應該能夠幫助你一點。 – jimyi 2009-06-26 14:26:24

回答

2

易之一:

$ret = preg_replace('/(^|[^\w])@([\d\w\-]+)/', '\\1<a href="http://twitter.com/$2">@$2</a>' ,$ret); 

唯一的區別是在@被移出捕獲組,這意味着它必須被手動添加到鏈接內的輸出的。

另外,\ w包含數字,所以\ d是多餘的。所以,你可以簡單地把它給:

$ret = preg_replace('/^|([^\w])@([\w\-]+)/', '\\1<a href="http://twitter.com/$2">@$2</a>' ,$ret); 
1

刪除@,用途:

$ret = preg_replace('/(^|[^\w])@([\d\w\-]+)/', '\\1<a href="http://twitter.com/$2">$2</a>' ,$ret); 

這使@的第二捕獲組的

外還看到http://www.regular-expressions.info/一些優秀的信息正則表達式(多種語言)

1

那麼,回答你的問題,^\v意味着第一個字符必須是「垂直空間「性格。基本上這意味着「開始一個空白的新行」

編輯:看起來像你其實更常見^\w這意味着「必須以'字'字開始。也就是說,一個字母或一個數字。

你可以找出所有這些字符表示here

相關問題