2016-05-13 16 views
1

Dies scheint eine einfache Frage zu sein, aber ich bin zu kämpfen mit Gefräßigkeit (glaube ich), und ich kann ein offensichtliches Beispiel nicht gefunden:Einfacher PCRE Regex

die folgende Zeichenfolge Gegeben:

text/html; text/xml; text/json 

Wie kann ich den 'ersten Untertyp' ('html' im obigen Beispiel) abrufen?

Ich habe alle möglichen Kombinationen wie folgt versucht:

(.*)\/(.*)[ |;] 

und die zweite Variable zu erhalten versuchen.

Ich weiß, dass die Zeichenfolge immer mindestens eine Saite in Form

aaa/bbb 

haben werden, und dass es entweder sein kann, oder es kann durch ein Semikolon (mit möglichen Leerzeichen zwischen ihnen) folgen und mehr Daten (die ich ignorieren kann - ich brauche nur den ersten Subtyp). So sind die möglichen Optionen könnte so aussehen:

text/html 
text/html; text/xml 
text/html ; text/xml  ; application/json 

Ich hatte gehofft, es wie der Suche nach dem ersten Schrägstrich so einfach war und dann alles nehmen, um entweder nach, dass bis ein leeres oder ein Semikolon oder das Ende der string (was ich meine Regex dachte), aber ich bin nicht genug in Regex.

Zur Klarstellung muss dies ein PCRE-kompatiblen regulären Ausdruck sein, wenn das hilft/behindert Dinge ...

+0

'\/[;]' - faul Matching verwenden (*.?) (*.?). Oder '[^ \ /] + \/(\ S +)' (beide mit 'preg_match', wenn es für PHP ist) –

Antwort

0

Do:

^[^\/]+\/([^\s;]+) 

Nun \1 ist der erste Subtyp Sie wollen.

Demo

+0

' [^ \ s] 'ist nur' \ S'. – kennytm

+0

@kennytm bearbeitet, sein Muskelgedächtnis ich denke :) – heemayl

+0

Hmm diese Regex wird 'text/html;' mit '" html; "'. Sieht so aus, als müsstest du '[^ \ s;]': | – kennytm

Verwandte Themen