2010-11-09 2 views
5

У меня есть существующий регулярное выражение:Twitter URL статус регулярных выражений

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

, что я использую для определения, является ли URL является URL обновления статуса щебетать. Например.

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

Но с тех пор "новый" твиттер вышел, они изменили 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' URLs так:'^HTTP (S)? : \/\/twitter \ .com \/(?: #! \ /)? (\ w +) \/status (es)? \/(\ d +) $ ' – iTurki

2

Ваше решение довольно близко. Вы можете просто добавить #!/ в качестве дополнительного элемента, как это:

(#!\/)? 

Так полное регулярное выражение будет выглядеть следующим образом:

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

Ewww! ☺ Не используйте слэши в качестве ограничителя цитирования регулярных выражений, когда у вас есть косые черты внутри, поэтому для этого потребуется обратный захват. В противном случае вы получаете icky LTS (Синдром отягощающего зуба) и инфекционный случай обратного скольжения для загрузки.

Нечто подобное намного лучше:

 
    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

+0

vinnie, рад слышать. – tchrist

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

Смежные вопросы