PHP 要捕获的正则表达式 mm:ss.uuu AND hh:mm:ss.uuu
PHP Regex to Capture mm:ss.uuu AND hh:mm:ss.uuu
我正在尝试捕获一些字幕文件的时间戳,但运气不错。
我已经设法得到一个将部分捕获 hh:mm:ss.uuu 的表达式,如下面的 #910 所示,但我无法弄清楚如果可选的 h:
如何捕获组或 hh:
不存在。到目前为止,我的工作是 https://regex101.com/r/4QWySg/1。如您所见,它仅在遇到第一个小时后才捕获。
感谢任何帮助:)
909
59:48.420 --> 1:00:06.450
THERE SHOULD BE AN OPTION TO UNMUTE DO
910
1:00:06.460 --> 1:00:09.870
YOU SEE A MICROPHONE ICON ANYWHERE ON YOUR TEAMS
(^\d+$\R)?(\d{1,2}(?::\d{2}){2}\.\d{2,3})\s*-->\s*(\d{1,2}(?::\d{2}){2}\.\d{2,3})\R((?:[^\r\n]|\r?\n[^\r\n])*)(?:\r?\n\r?\n|$)
您可能需要对其进行编辑以符合您的其他规范(例如 \r\n 到目前为止您工作即将结束的内容),但这会标识所有时间戳和 post/caption您示例中的数字:
(^\d+$\R)?(^\d{2}:\d{2}.\d{3}|^\d{1,2}:\d{2}:\d{2}.\d{3})\s*-->\s*(\d{2}:\d{2}.\d{3}|\d{1,2}:\d{2}:\d{2}.\d{3})
我用的是管道 |创建匹配两种预期时间戳格式的 or 语句。
您可以简化正则表达式并在 PHP 中使用它获取所有匹配项:
((?:\d{1,2}:)?\d{2}:\d{2}\.\d{2,3})\s*-->\s*((?1))\R(.+)
正则表达式详细信息:
(
: 开始捕获组#1
(?:\d{1,2}:)?
:匹配可选的小时数字后跟 :
\d{2}:\d{2}\.\d{2,3}
:匹配mm:ss.uuu
部分
)
: 结束捕获组#1
\h*-->\h*
:匹配->
两边可选空格包围
((?1))
:递归第一个 子模式 即使用与组 #1 中相同的模式进行匹配。在组 #2 中捕获它
\R
:匹配任意换行符
(.+)
:匹配第 3 个捕获组中任何字符的 1+ 个作为标题
我正在尝试捕获一些字幕文件的时间戳,但运气不错。
我已经设法得到一个将部分捕获 hh:mm:ss.uuu 的表达式,如下面的 #910 所示,但我无法弄清楚如果可选的 h:
如何捕获组或 hh:
不存在。到目前为止,我的工作是 https://regex101.com/r/4QWySg/1。如您所见,它仅在遇到第一个小时后才捕获。
感谢任何帮助:)
909
59:48.420 --> 1:00:06.450
THERE SHOULD BE AN OPTION TO UNMUTE DO
910
1:00:06.460 --> 1:00:09.870
YOU SEE A MICROPHONE ICON ANYWHERE ON YOUR TEAMS
(^\d+$\R)?(\d{1,2}(?::\d{2}){2}\.\d{2,3})\s*-->\s*(\d{1,2}(?::\d{2}){2}\.\d{2,3})\R((?:[^\r\n]|\r?\n[^\r\n])*)(?:\r?\n\r?\n|$)
您可能需要对其进行编辑以符合您的其他规范(例如 \r\n 到目前为止您工作即将结束的内容),但这会标识所有时间戳和 post/caption您示例中的数字:
(^\d+$\R)?(^\d{2}:\d{2}.\d{3}|^\d{1,2}:\d{2}:\d{2}.\d{3})\s*-->\s*(\d{2}:\d{2}.\d{3}|\d{1,2}:\d{2}:\d{2}.\d{3})
我用的是管道 |创建匹配两种预期时间戳格式的 or 语句。
您可以简化正则表达式并在 PHP 中使用它获取所有匹配项:
((?:\d{1,2}:)?\d{2}:\d{2}\.\d{2,3})\s*-->\s*((?1))\R(.+)
正则表达式详细信息:
(
: 开始捕获组#1(?:\d{1,2}:)?
:匹配可选的小时数字后跟:
\d{2}:\d{2}\.\d{2,3}
:匹配mm:ss.uuu
部分
)
: 结束捕获组#1\h*-->\h*
:匹配->
两边可选空格包围((?1))
:递归第一个 子模式 即使用与组 #1 中相同的模式进行匹配。在组 #2 中捕获它
\R
:匹配任意换行符(.+)
:匹配第 3 个捕获组中任何字符的 1+ 个作为标题