2012-04-12 10 views
2

Dies ist ein Regex von einem MediaWiki, einer Open Source Wiki Lösung.Was passt dieser Regex? php regex von mediawiki sourcecode

/\[((http\:\/\/|https\:\/\/|ftp\:\/\/|irc\:\/\/|ircs\:\/\/|gopher\:\/\/|telnet\:\/\/|nntp\:\/\/|worldwind\:\/\/|mailto\:|news\:|svn\:\/\/|git\:\/\/|mms\:\/\/|\/\/)[^][<>"\x00-\x20\x7F\p{Zs}]+)\p{Zs}*([^\]\x00-\x08\x0a-\x1F]*?)\]/Su 

Für mich scheint es, als ob es Uri's entspricht, aber ich kann es nicht zu etwas passen. Und ich habe Schwierigkeiten, den letzten Teil der Regex zu verstehen, nämlich.

[^][<>"\x00-\x20\x7F\p{Zs}]+)\p{Zs}*([^\]\x00-\x08\x0a-\x1F]*?)\] 

was zum Teufel macht das?

Jede Hilfe bei der Decodierung wird sehr geschätzt.

Antwort

4

Diese Regex passt external links wie

[http://www.stackoverflow.com] 
[https://www.stackoverflow.com StackOverflow] 
[ftp://ftp.mozilla.org Mozilla] 
+0

Danke, ich mich als gut gerade herausgefunden .. – netbrain

3

[^][<>"\x00-\x20\x7F\p{Zs}]
eine negierte Zeichenklasse ist, dass jeder Charakter passt aber: ][<>", \x00-\x20 der ASCII-Zeichenbereich, das ASCII-Zeichen \x7F und Leerzeichen (p{Zs} ist ein Unicode Character Property, dass passt zu jeder Art von Leerzeichen Zeichen)

\p{Zs}* passt jede Art von Leerzeichen Zeichen 0 oder öfter

[^\]\x00-\x08\x0a-\x1F]
Ist eine negierte Zeichenklasse, die alle Zeichen übereinstimmt, aber ], das ASCII-Zeichen im Bereich \x00-\x08 und \x0a-\x1F

+0

Ihr erster Satz falsch ist. Sie müssen '[^] [<>" \ x00- \ x20 \ x7F \ p {Zs}] 'in' [^] 'und' [<> "\ x00- \ x20 \ x7F \ p {Zs} trennen. ] 'da das'] 'die Zeichenklasse schließt und nicht maskiert ist. Als solches stimmt es zuerst mit * any * überein und stimmt dann mit dem von der zweiten Gruppe angegebenen Zeichen überein. – poke

+1

Nein, '[^] [<>" \ x00- \ x20 \ x7F \ p {Zs}] 'ist eine Zeichenklasse. Das erste'] 'wird als ein Literal'] 'behandelt, weil es das erste Zeichen ist, das aufgelistet wird (oder zuerst nach dem Negieren von '^', in diesem Fall), genau wie '-' wäre das. Es ist eine nette kleine Stealth-Funktion, die ich von allen Aromen unterstützt würde. –

+0

@AlanMoore danke, ich wusste, ich sah irgendwo, dass es ist so definiert, ich getestet auf Regexr nach Poke Kommentar und da diese Funktion nicht verfügbar ist. Aber die Regex macht nur Sinn mit dieser Interpretation. Rollback meine Antwort. – stema