2010-11-09 10 views
5

Ho un regex esistente:Twitter stato URL regex

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

che uso per determinare se un URL è un URL aggiornamento di stato Twitter. Per esempio.

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

Ma da "nuovo" Twitter è venuto fuori, hanno cambiato l'URL di stato a guardare come:

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

con l'aggiunta/#!

Quindi la mia domanda è: come posso modificare la mia espressione regolare in modo che corrisponda a entrambi gli URL?

Il mio tentativo fallito finale è stata:

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

risposta

8

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

Questo corrisponderà entrambi gli URL originali ei nuovi URL hash tag.

Se si desidera solo per abbinare i nuovi URL, questo dovrebbe farlo: /^https?:\/\/twitter\.com\/#!\/(\w+)\/status(es)?\/(\d+)$/

+0

Questo gestirà 'https' urls così:'^http (s)? : \/\/twitter \ .com \/(?: #! \ /)? (\ w +) \/status (es)? \/(\ d +) $ ' – iTurki

2

La soluzione è abbastanza vicino. Si può semplicemente aggiungere il #!/ come un elemento opzionale del genere:

(#!\/)? 

Quindi l'espressione regolare pieno sarebbe simile a questa:

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

Ewww! ☺ Non usa tagli come il regex che cita il delimitatore quando hai delle barre all'interno che richiederebbero quindi il backwhacking. Altrimenti si ottiene l'icky LTS (sindrome dello stuzzicadenti pendente) e un caso contagioso di backslashitis.

Qualcosa di simile a questo è molto meglio:

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

o

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

o se non c'è bisogno di catturare porzioni:

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

o se si vuole fare leggibile:

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

che è anche beter quando suddiviso su più righe in modo da poter lasciare un commento, esso:

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

grazie - anche questo ha funzionato – vinnie

+0

vinnie, lieto di ascoltalo – tchrist

0

@ Kevin risposta aggiornata.

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

Partite entrambe:

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

È possibile eseguire da soli qui:

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

Problemi correlati