2015-06-11 5 views
1

Мне нужно сопоставить следующую строку, разделенную пробелами, начиная с «Токен».
Пример строкиСопоставьте все повторяющиеся события regex

Token token=12eqddsfasdsa [email protected] app_id=2312edsdas 

Я попробовал несколько выражений.

^Token (\w*=[^-\s]+) 

Захватывает только одно первое совпадение.

^Token(\s\w*=[^-\s]+)+ 

Это выражение отражает только последнее.

мне нужно, чтобы захватить

match[0] = token=12eqddsfasdsa 
match[1] = [email protected] 
match[2] = app_id=2312edsdas 

Я знаю, есть простой способ добиться этого результата, но я не достаточно опытен, чтобы получить его.
Пожалуйста, помогите с этим.

+0

Я могу только разделить пары значений в PHP коде. Мне нужно получить записи, как я описал – CROSP

ответ

2

Вы столкнулись с общей проблемой захвата контента для повторяющихся групп, так я хотел бы использовать два регулярных выражений для этого:

1- Во-первых, чтобы обнаружить строку, начинающуюся с Token рисунком, используя это регулярное выражение:

^Token 

2- Для извлечения спичек вы заинтересованы в использовании другого регулярного выражения (как у вас):

(\w*=[^-\s]+) 

Вы можете использовать код, подобные этой

$str = <your string> 
if (preg_match("/^Token/", $str)) { 
    preg_match_all('/(\w*=[^-\s]+)/', $str, $matches); 
} 

информации Match

MATCH 1 
1. [6-25] `token=12eqddsfasdsa` 
MATCH 2 
1. [26-50] `[email protected]` 
MATCH 3 
1. [51-68] `app_id=2312edsdas` 
+0

Спасибо за ответ, единственное, что он возвращает массив из двух элементов, они точно такие же подмассивы. – CROSP

2

Я думаю, что простой способ использует функцию взрывается.

$str = "Token token=12eqddsfasdsa [email protected] app_id=2312edsdas"; 
$result = explode(" ", $str); 

Результат будет выглядеть следующим образом:

Array ([0] => "Token" [1] => "token=12eqddsfasdsa". [2] => "[email protected]" [3] => "app_id=2312edsdas") 
+0

Также возможен способ, благодарю вас за помощь. – CROSP

Смежные вопросы