Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 正则表达式解析视频持续时间字符串_Php_Regex - Fatal编程技术网

Php 正则表达式解析视频持续时间字符串

Php 正则表达式解析视频持续时间字符串,php,regex,Php,Regex,我想在评论中找到所有视频持续时间链接,并将其转换为锚定标签 持续时间可能如下所示: 01:20:55 (h:m:s) 20:30 (m:s) 1:21 (m:s) 1:35:12 (h:m:s) 我觉得我可能很接近,但我对regex还是很陌生 在此上下文中使用: $parsedTimeCommentString = preg_replace("/^([\d]{1,2}\:)?([\d]{1,2})?\:([\d]{1,2})$/", "<a href=\"#\" class=\"vi

我想在评论中找到所有视频持续时间链接,并将其转换为锚定标签

持续时间可能如下所示:

01:20:55 (h:m:s)
20:30 (m:s)
1:21 (m:s)
1:35:12 (h:m:s)
我觉得我可能很接近,但我对regex还是很陌生

在此上下文中使用:

$parsedTimeCommentString = preg_replace("/^([\d]{1,2}\:)?([\d]{1,2})?\:([\d]{1,2})$/", 
"<a href=\"#\" class=\"video-seek\" data-seek=\"$1:$2:$3\">$1:$2:$3</a>",
 $comment['comment']);
$parsedTimeCommentString=preg\u replace([\d]{1,2}:)?([\d]{1,2})?\:([\d]{1,2})$/“,
"",
$comment['comment']);

它可能看起来很奇怪,但我认为它应该更像这样:

(?<![\d:])(?:(?:(\d\d?):([0-5]\d))|([0-5]?\d)):([0-5]\d)(?![\d:])
/([\d]{1,2}\:)?([\d]{1,2})\:([\d]{1,2})/g
(?
要保留格式:hh:mm:ss,h:mm:ss,mm:ss,m:ss并避免匹配无效(用于时间格式)字符串,如:1:3:4,14:1:14,45:4:4,88:99,345:456(as 45:45),2:3等


它以$1捕获小时,以$4捕获秒,但以$2或$3捕获分钟。

删除锚,并使用非捕获组来禁止冒号:

(?:(\d{1,2}):)?(\d{1,2}):(\d{2})

我会删除线锚(^$),这样您的字符串就可以匹配其他文本中的时间戳。此外,您应该将第二个捕获组设置为非可选组,这样“:3”之类的内容就无法通过。您需要将其设置为全局/g,这样它就可以替换所有发生的事件。类似这样的内容:

(?<![\d:])(?:(?:(\d\d?):([0-5]\d))|([0-5]?\d)):([0-5]\d)(?![\d:])
/([\d]{1,2}\:)?([\d]{1,2})\:([\d]{1,2})/g

持续时间都在一个字符串中吗?去掉尾部的锚,应该对你有用。刚刚更新了我的正则表达式链接以包含use casesOkay,你当前的正则表达式有什么问题吗?找到所有值后,启用该站点上的
global
标志以查看它。
preg\u replace
默认为全局。这肯定是我不知道的地方在那个网站上没有启用全局标志!我想我也应该做几秒钟的
\d{2}
。我从未见过
m:s
格式为
5:3
5:03