gpt4 book ai didi

php - 来自字幕的 SRT 和 VTT 语法的 RegEx 匹配

转载 作者:行者123 更新时间:2023-12-04 00:26:45 31 4
gpt4 key购买 nike

我有 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/dec294251b879144f40a6d1bdd516d2050321242

目标是匹配字幕编号,例如第一个预期匹配应该是:
1
00:00:04,019 --> 00:00:07,299

最佳答案

您可以将表达式 \n?\d*?\n? 的这一部分设为可选组,以匹配 1+ 位数字后跟换行符。字符类 [012345] 也可以写成 [0-5]
您可以将表达式更新为:

^(?:\d+\n)?.*\h+-->\h+[0-5]{2}:.*$
  • ^ 字符串开头
  • (?:\d+\n)? 可选的 1+ 位数字和换行符
  • .*\h+-->\h+ Match 0+ times any char except newline, 1+ horizontal whitespace chars, -->` 和 1+ 个水平空白字符
  • [0-5]{2}: 匹配 2 次 0-5
  • .* 匹配 0+ 次除换行符以外的任何字符
  • $ 字符串结尾

  • Regex demo | Php demo

    关于php - 来自字幕的 SRT 和 VTT 语法的 RegEx 匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56049929/

    31 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com