У меня есть субтитры как в формате srt, так и в формате vtt, где мне нужно сопоставить и удалить синтаксис, специфичный для формата, и просто получить чистые строки с текстом.
Я придумал это регулярное выражение: /\n?\d*?\n?^.* --> [012345]{2}:.*$/m
образец содержимого (смешайте как srt, так и vtt):
1
00:00:04,019 --> 00:00:07,299
line1
line2
2
00:00:07,414 --> 00:00:09,155
line1
00:00:09,276 --> 00:00:11,429
line1
00:00:11,549 --> 00:00:14,874
line1
line2
Это соответствует как номеру субтитров, так и времени, как и ожидалось, смоделировано в https://regex101.com/r/zRsRMR. /2/а>
Но при использовании в самом коде (даже с использованием непосредственно сгенерированного фрагмента кода из https://regex101.com) это будет соответствовать только времени, а не номеру субтитров.
Смотрите вывод:
array (5)
0 => array (1)
0 => "00:00:04,019 --> 00:00:07,299
" (30)
1 => array (1)
0 => "
00:00:07,414 --> 00:00:09,155
" (31)
2 => array (1)
0 => "
00:00:09,276 --> 00:00:11,429
" (31)
3 => array (1)
0 => "
00:00:11,549 --> 00:00:14,874
" (31)
4 => array (1)
0 => "
00:00:11,549 --> 00:00:14,874
" (31)
Можно протестировать на: http://sandbox.onlinephpfunctions.com/code/dec294251b879144f40a6d1bdd516d20420321>
Цель состоит в том, чтобы сопоставить даже номер субтитров, например, первое ожидаемое совпадение должно быть:
1
00:00:04,019 --> 00:00:07,299