2010-11-09 35 views
5

我有一個現有的正則表達式:Twitter狀態URL正則表達式

/^http:\/\/twitter\.com\/(\w+)\/status(es)*\/(\d+)$/ 

,我使用的確定是否URL是Twitter的狀態更新URL。例如。

http://twitter.com/allWPthemes/status/2040410213974016 

但自從 「新」 的Twitter出來後,他們已經改變了狀態的URL看起來像:

http://twitter.com/#!/allWPthemes/status/2040410213974016 

與添加/#!

所以我的問題是:如何修改我的正則表達式來匹配兩個URL?

我最終失敗的嘗試是:

^http:\/\/twitter\.com\/(#!\/w+|\w+)\/status(es)*\/(\d+)$ 

回答

8

試試這個: /^https?:\/\/twitter\.com\/(?:#!\/)?(\w+)\/status(es)?\/(\d+)$/

這將同時匹配原始URL和新的哈希代碼網址。

如果你只是想以匹配新的URL,這應該這樣做: /^https?:\/\/twitter\.com\/#!\/(\w+)\/status(es)?\/(\d+)$/

+0

這將處理'https'網址以及:'^ HTTP(S)? :\/\/twitter \ .com \ /(?:#!\ /)?(\ w +)\/status(es)?\ /(\ d +)$' – iTurki 2014-03-01 05:32:50

2

您的解決方案是非常接近。你可以簡單地添加#!/作爲這樣的一個可選元素:

(#!\/)? 

,所以該完整的正則表達式應該是這樣的:

/^http:\/\/twitter\.com\/(#!\/)?(\w+)\/status(es)*\/(\d+)$/ 
2

EWWW! ☺當你有斜槓時,不要使用斜槓作爲正則表達式的引號分隔符,因此需要反衝。否則,你會得到骯髒的LTS(Leaning Toothpick Syndrome)和傳染性脊椎炎病例。

像這樣的東西要好得多:

 
    m!http://twitter.com/(#!/)?\w+/status(es)?/(\d+)$! 

 
    m{http://twitter.com/(#!/)?\w+/status(es)?/(\d+)$} 

,或者如果你不需要捕獲部分:

 
    m{http://twitter.com/(?:#!/)?\w+/status(?:es)?/(?:\d+)$} 

,或者如果你想它可讀:

 
    m{ http:// twitter.com/(\x23 ! /)? \w+/status (es)?/(\d+) $ }x 

這是當在多行分解,所以你可以發表評論它甚至尤爲明顯:

 
    m{ 
      http: 
     // twitter.com 
     /(\x23 ! /)?  # optional new "#!" element 
      \w+ 
     /status (es)?   # one or more statuses 
     /(\d+) 
      $ 
    }x 
+0

謝謝 - 這也起作用 – vinnie 2010-11-10 05:07:01

+0

vinnie,聽到。 – tchrist 2010-11-10 05:29:01

0

@Kevin答案更新。

^https?:\/\/twitter\.com\/(?:#!\/)?(\w+)\/status(?:es)?\/(\d+)(?:\/.*)?$ 

同時匹配:

https://twitter.com/someone/status/866002913604149248 
https://twitter.com/someone/status/857179125076963329/video/1 

你可以自己跑這裏來了他們:

https://regex101.com/r/mNsp3o/3