preg_match_all, чтобы вернуть все совпадающие строки и исключить шаблон, который был сопоставлен
Я обрабатываю большой кусок данных и пытаюсь вернуть все строки в нем, которые содержат строку "INFO:". Мне удалось получить шаблон для возврата данных, которые меня интересуют, но я хотел узнать, как улучшить этот шаблон регулярных выражений, чтобы исключить строку, которую я сопоставляю (а также пробел, если это возможно), поэтому что возвращаются только те данные, которые меня интересуют.
$pattern = "/^.*INFO:.*\$/m";
preg_match_all($pattern, $content, $matches);
INFO: framerate 25.00
INFO: width 480.00
INFO: height 360.00
INFO: audioinputvolume 75.00
INFO: audiocodecid mp4a
INFO: audiodatarate 48.00
3 ответа
Поместите интересующие вас группы в подшаблон ( )
Я думаю, что в вашем случае это будет выглядеть так:
$pattern = "/^.*INFO:(.*)\$/m";
Теперь вы можете увидеть содержимое того, что было в скобках, используя $matches[1][$match]
preg_match_all('/^INFO:\s+([^\s]+)\s+([^\s]+)$/ms', $content, $matches);
Возвращает:
Array
(
[0] => Array
(
[0] => INFO: framerate 25.00
[1] => INFO: width 480.00
[2] => INFO: height 360.00
[3] => INFO: audioinputvolume 75.00
[4] => INFO: audiocodecid mp4a
[5] => INFO: audiodatarate 48.00
)
[1] => Array
(
[0] => framerate
[1] => width
[2] => height
[3] => audioinputvolume
[4] => audiocodecid
[5] => audiodatarate
)
[2] => Array
(
[0] => 25.00
[1] => 480.00
[2] => 360.00
[3] => 75.00
[4] => mp4a
[5] => 48.00
)
)
Обратите внимание, что ни одно из полей не может иметь пробелов таким образом.
$pattern = "/INFO:\s+(.*?)\s+(.*?)(\s|$)/m";
Это должно делать свое дело. Материал, указанный в скобках, будет отображаться как элементы в $match [1] и $match [2]
Вот что это вывело бы:
Array
(
[0] => Array
(
[0] => INFO: framerate 25.00
[1] => INFO: width 480.00
[2] => INFO: height 360.00
[3] => INFO: audioinputvolume 75.00
[4] => INFO: audiocodecid mp4a
[5] => INFO: audiodatarate 48.00
)
[1] => Array
(
[0] => framerate
[1] => width
[2] => height
[3] => audioinputvolume
[4] => audiocodecid
[5] => audiodatarate
)
[2] => Array
(
[0] => 25.00
[1] => 480.00
[2] => 360.00
[3] => 75.00
[4] => mp4a
[5] => 48.00
)
[3] => Array
(
[0] =>
[1] =>
[2] =>
[3] =>
[4] =>
[5] =>
)
)
Существует третий массив всех символов пробела / конца строки, потому что я использовал круглые скобки, чтобы использовать | оператор, чтобы сказать, что пробел ИЛИ конец текста хорошо подходит.