Вот пример текста, который я должен фильтровать:
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
}
и так далее.
Что я могу сделать, чтобы решить эту проблему?
объедините все, что вам нужно
$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 "
}
}
Это то, что вы хотите:
$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
)
)
:
но я думаю, что смогу справиться с этим