2010-11-09 5 views
5

J'ai un regex existant:Twitter état URL regex

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

que j'utilise pour déterminer si une URL est une URL de mise à jour de statut Twitter. Par exemple.

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

Mais depuis "nouvelle" twitter est sorti, ils ont changé de regarder de l'URL d'état comme:

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

avec la valeur ajoutée/#! Donc, ma question est: Comment puis-je modifier mon regex pour correspondre aux deux URL?

Ma dernière tentative a échoué était:

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

Répondre

8

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

Cela correspondra à la fois les URL d'origine et les nouvelles URL de balise de hachage.

Si vous voulez juste faire correspondre les nouvelles URL, ce qui devrait le faire: /^https?:\/\/twitter\.com\/#!\/(\w+)\/status(es)?\/(\d+)$/

+0

Cela 'traiter https' urls ainsi:'^http (s)? : \/\/twitter \ .com \/(?: #! \ /)? (\ w +) \/status (es)? \/(\ d +) $ ' – iTurki

2

Votre solution est assez proche. Vous pouvez simplement ajouter le #!/ comme un élément facultatif comme celui-ci:

(#!\/)? 

Ainsi, la pleine regex ressemblerait à ceci:

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

Beurk! ☺ N'utilisez pas de barres obliques comme délimiteur d'expressions rationnelles lorsque vous avez des barres obliques à l'intérieur qui nécessiteraient donc un backwhacking. Dans le cas contraire, vous avez un LTS icky (Leaning Toothpick Syndrome) et un cas infectieux de backslashitis.

Quelque chose comme ceci est beaucoup mieux:

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

ou

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

ou si vous n'avez pas besoin de saisir les parties:

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

ou si vous voulez faire c'est lisible:

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

qui est encore Beter quand divisé sur plusieurs lignes afin que vous puissiez la commenter:

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

merci - cela a également travaillé – vinnie

+0

vinnie, heureux de entendez-le. – tchrist

0

réponse mis à jour @ Kevin.

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

les deux matchs:

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

Vous pouvez les exécuter par vous-même ici:

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