preg match all не сохраняет все совпадения

1

Вот пример текста, который я должен фильтровать:

12:00 NAME HTG DAW SDAWERWF 15:00 NUM LEON PARA 20: PEAX SHU MAN POP

и у меня есть это регулярное выражение: /([0-9]{2})(.*)([0-9]{2})/

в этом коде: preg_match_all ($pattern,$string,$matches);

Проблема в том, что она сохраняет первое совпадение в $matches match, но второе совпадение не сохраняется.

ожидаемый результат:

array(){
 0 => 12
 1 => :00 NAME HTG DAW SDAWERWF
 2 => 15
 3 => :00 NUM LEON PARA
}

и так далее.

Что я могу сделать, чтобы решить эту проблему?

  • 0
    Каков ваш ожидаемый результат? Помните, что в этой строке есть только 1 совпадение с текущим регулярным выражением.
  • 0
    О да, извините, дайте мне отредактировать
Показать ещё 3 комментария
Теги:
preg-match
preg-match-all

3 ответа

0

Вы можете использовать это регулярное выражение:

'~\b(:?\d{2}.*?)(?=\h*:?\d{2})~'

Демо-версия RegEx

0

объедините все, что вам нужно

$string = "12:00 NAME HTG DAW SDAWERWF 15:00 NUM LEON PARA 20: PEAX SHU MAN POP";
$pattern = '/([0-9]{1,2})(:.*[^\d])([0-9]{1,2})(:.*[^\d])[0-9]{1,2}:/';

preg_match_all ($pattern,$string,$matches);
array_shift($matches);

var_dump($matches);

вывод

array(4) {
  [0]=>
  array(1) {
    [0]=>
    string(2) "12"
  }
  [1]=>
  array(1) {
    [0]=>
    string(26) ":00 NAME HTG DAW SDAWERWF "
  }
  [2]=>
  array(1) {
    [0]=>
    string(2) "15"
  }
  [3]=>
  array(1) {
    [0]=>
    string(18) ":00 NUM LEON PARA "
  }
}

за работой

  • 0
    А что сейчас?
  • 0
    выход
Показать ещё 7 комментариев
0

Это то, что вы хотите:

$string = '12:00 NAME HTG DAW SDAWERWF 15:00 NUM LEON PARA 20: PEAX SHU MAN POP';

preg_match_all('/(\d\d)(.+?)(?=\d|$)/', $string, $m);
print_r($m);

Вывод:

Array
(
    [0] => Array
        (
            [0] => 12:
            [1] => 00 NAME HTG DAW SDAWERWF 
            [2] => 15:
            [3] => 00 NUM LEON PARA 
            [4] => 20: PEAX SHU MAN POP
        )

    [1] => Array
        (
            [0] => 12
            [1] => 00
            [2] => 15
            [3] => 00
            [4] => 20
        )

    [2] => Array
        (
            [0] => :
            [1] =>  NAME HTG DAW SDAWERWF 
            [2] => :
            [3] =>  NUM LEON PARA 
            [4] => : PEAX SHU MAN POP
        )

)
  • 0
    вывод я тоже хочу первое совпадение без второго совпадения
  • 0
    Вы приближаете меня очень сильно, просто должны избавиться от : но я думаю, что смогу справиться с этим
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню