2010-11-09 16 views
5

Ich habe eine bestehende regex:Twitter Status URL Regex

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

, die ich für die Bestimmung verwendet werden, wenn eine URL eine Twitter-Status-Update-URL ist. Z.B.

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

Aber seitdem "neue" Twitter herauskam, haben sie den Status-URL geändert aussehen:

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

mit dem zusätzlichen/#!

Also meine Frage ist: Wie kann ich meine Regex zu beiden URLs zu ändern?

Mein letzter Versuch war gescheitert:

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

Antwort

8

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

Dies wird passen sowohl die ursprünglichen URLs und den neuen Hash-Tag-URLs.

Wenn Sie nur die neuen URLs wollen übereinstimmen, dies sollte es tun: /^https?:\/\/twitter\.com\/#!\/(\w+)\/status(es)?\/(\d+)$/

+0

Dies wird Griff 'https' Urls auch:'^http (s)? : \/\/twitter \ .com \/(?: #! \ /)? (\ w +) \/status (es)? \/(\ d +) $ ' – iTurki

2

Ihre Lösung ziemlich nahe ist. Sie können einfach das #!/ als optionales Element wie folgt hinzu:

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

Ewww:

(#!\/)? 

So ist die volle Regex würde wie folgt aussehen! ☺ Verwenden Sie keine Schrägstriche als Regex-Anführungszeichen, wenn Sie Schrägstriche im Inneren haben, die daher Back-Back benötigen. Ansonsten bekommst du icky LTS (Leaning Toothpick Syndrome) und einen ansteckenden Fall von Backslashitis.

So etwas ist viel besser:

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

oder

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

oder wenn Sie nicht brauchen, Teile zu erfassen:

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

oder wenn Sie wollen machen es lesbar:

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

die sogar beter ist, wenn über mehrere Zeilen aufgebrochen, so dass Sie es kommentieren:

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

danke - das hat auch funktioniert – vinnie

+0

vinnie, froh zu Höre es. – tchrist

0

@ Kevin aktualisiert Antwort.beide

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

Spiele:

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

Sie können sie selbst laufen hier:

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