2016-05-13 5 views
1

Это, казалось бы, простой вопрос, но я борюсь с жадностью (я думаю), и я не могу найти очевидный пример:Простой PCRE Regex

дана следующая строка:

text/html; text/xml; text/json 

Что мне нужно сделать, чтобы получить «первый подтип» («html» в приведенном выше примере)?

Я пробовал все виды комбинаций, как это:

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

и пытается получить вторую переменную.

Я знаю, что строка всегда будет иметь по крайней мере одну строку в виде

aaa/bbb 

и которые могут быть либо его, либо он может сопровождаться запятой (с возможностью пробелов между ними) и больше данных (которые я могу игнорировать - мне нужен только первый подтип). Таким образом, возможные варианты могут быть такие:

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

Я надеялся, что это было так просто, как глядя на первый слэш, а затем принимать все после того, что до либо пробел или точку с запятой или конца string (это то, что я думал о моем регулярном выражении), но я недостаточно квалифицирован в регулярном выражении.

Для уточнения, это должно быть PCRE-совместимый регулярное выражение, если это помогает/мешает вещи ...

+0

'\/[;]' - использовать ленивое соответствие (*.?) (*.?). Или '[^ \ /] + \/(\ S +)' (оба с 'preg_match', если это для PHP) –

ответ

0

Do:

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

Теперь \1 является первым подтипом вы хотите.

Demo

+0

' [^ \ s] 'просто' \ S'. – kennytm

+0

@kennytm отредактирован, его память в мышке я думаю :) – heemayl

+0

Хм это регулярное выражение будет соответствовать 'text/html;' с '" html; "'. Похоже, вам нужно '[^ \ s;]': | – kennytm