Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Тексты > Регулярка preg_match_all


Автор: alligator 21.2.2018, 01:44
Всем доброго времени суток!
Что-то не получается разобраться с регуляркой....
есть многострочный текст вида:
Код

grey2 has 0 calls (max unlimited) in 'ringall' strategy (0s holdtime, 0s talktime), W:0, C:0, A:0, SL:0.0% within 0s
   Members: 
      Local/627@incoming-ivr/n (ringinuse enabled) (Not in use) has taken no calls yet
      Local/614@incoming-ivr/n (ringinuse enabled) (Not in use) has taken no calls yet
   No Callers

abc has 0 calls (max unlimited) in 'ringall' strategy (0s holdtime, 0s talktime), W:0, C:0, A:0, SL:0.0% within 0s
   Members: 
      SIP/403 (ringinuse enabled) (Not in use) has taken no calls yet
   No Callers

hotline has 0 calls (max unlimited) in 'ringall' strategy (2s holdtime, 156s talktime), W:0, C:4, A:0, SL:0.0% within 0s
   Members: 
      Local/299@incoming-ivr/n (ringinuse enabled) (Not in use) has taken no calls yet
      Local/599@incoming-ivr/n (ringinuse enabled) (Not in use) has taken no calls yet
      Local/928@incoming-ivr/n (ringinuse enabled) (Not in use) has taken no calls yet
      Local/199@incoming-ivr/n (ringinuse enabled) (Not in use) has taken 4 calls (last was 2631 secs ago)
      Local/925@incoming-ivr/n (ringinuse enabled) (Not in use) has taken no calls yet
      Local/922@incoming-ivr/n (ringinuse enabled) (Not in use) has taken no calls yet
   No Callers



Хочу из текста получить имя очереди и ее членов....
Делаю так:
Код

preg_match_all('/(?<QUEUE>[\w\d_]*)\s?has\s?\d{1,3}\s?calls.*?(?:Members:.*?Local\/((?<MEMBER>\d{1,5})).*?yet.*?Callers)/ims', $queue_data, $matches,PREG_SET_ORDER|PREG_OFFSET_CAPTURE);

В результате получаю имея очереди и только первого ее члена.... как можно поправить чтобы получало всех ?
версия php 5.4

на выходе хотелось бы получить массив вида:
Код

Array
(
    [0] => Array
        (
            [0] => Array
                (
                    [0] => grey2 has 0 calls (max unlimited) in 'ringall' strategy (0s holdtime, 0s talktime), W:0, C:0, A:0, SL:0.0% within 0s
   Members: 
      Local/627
                    [1] => 0
                )

            [1] => Array
                (
                    [0] => grey2
                    [1] => 0
                )

            [2] => Array
                (
                    [0] => 627
                    [1] => 142
                )
            [3] => Array
                (
                    [0] => 614
                    [1] => 152
                )
        )


Автор: _zorn_ 23.2.2018, 17:55
У меня есть задача.О, я решу ее с помощью регулярных выражений... Теперь у меня две задачи.
Вычленяй по "Members:" и "No Callers" а потом регулярками проходись.
Регулярки чем и коварны, что ты до последнего будешь пытаться одной все решить....

Автор: alligator 24.2.2018, 17:59
Цитата(_zorn_ @ 23.2.2018,  18:55)
У меня есть задача.О, я решу ее с помощью регулярных выражений... Теперь у меня две задачи.
Вычленяй по "Members:" и "No Callers" а потом регулярками проходись.
Регулярки чем и коварны, что ты до последнего будешь пытаться одной все решить....

Сделал двумя:
1. Получаем имя очереди в одну переменную и содержимое между Members и Callers в другую
2. разбираю содержимое  Members и Callers другой регуляркой в цикле....

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)