2015-09-30 2 views
-1

У меня есть следующий вход:Извлечение подстроки с окончанием "mp4"

string='GET........ref=mp4;GET........ref=flv;GET........ref=mp4;' 

Он имеет 3 сегментов. Мне нужно извлечь сегменты, заканчивающиеся на mp4;.

ie.

GET........ref=mp4 
GET........ref=mp4 

Текущий результат будет соответствовать GET........ref=mp4 и GET........ref=flv;GET........ref=mp4;.

Мой регулярный экспресс: GET(.*?)mp4

мне не нужен длинный матч, содержащий flv внутри, и это регулярное выражение не работает: GET(.*?)(?!:flv)mp4

Я не знаю, как решить и любая помощь приветствуется ,

+0

Не могли бы вы опубликовать реальную строку вместо упрощенной строки. –

ответ

1

Вы можете взорвать точку с запятой список, а затем использовать preg_grep получить только те элементы, которые заканчиваются mp4:

$string='GET........ref=mp4;GET........ref=flv;GET........ref=mp4;'; 
$res = explode(";", $string); 
$res = preg_grep('/mp4$/i', $res); 
print_r($res); 

См IDEONE demo

Если нет точки с запятой, все клееная:

// NO SEMI_COLONS 
$str='GET........ref=mp4GET........ref=flvGET........ref=mp4'; 
preg_match_all('/GET\b(?:(?!GET\b).)*mp4(?=$|GET\b)/', $str, $res); 
print_r($res); 

См another IDEONE demo

+0

На самом деле, у них нет точки с запятой между ними, я просто ставил их легче распознавать сегменты. – Wendy

+0

Я добавил еще один ответ, если у вас есть все подстроки «GET», склеенные вместе. –

+0

@Wendy: Пожалуйста, проверьте, не работает ли это для вас. –

0

Первые вещи первых, вам нужно разделить вашу строку на лексемы:

http://get........ref=mp4 
http://get........ref=flv 
http://get........ref=mp4 

, а затем применить регулярное выражение. если вам нужно, чтобы он начинался с http и заканчивался на mp4, используйте «^ http. mp4 $» .^означает начало строки, $ означает конец строки и. означает соответствие любому символу 0 или более раз. Пример использования sed для разделения результатов, например:

echo "http://get........ref=mp4;http://get........ref=flv;http://get........ref=mp4a;" | sed s/';'/\\n/g | grep "^http.*mp4$" 

EDIT: if ';' не является вашим настоящим разделителем, замените его тем, что является реальным разделителем.

0

Если вы ищете немного более чистый подход, который будет работать с или без ;

preg_match_all("/GET(?:(?!GET).)*=mp4/", $str, $res); 
print_r($res); 
Смежные вопросы