这是内容。
2:00
10:00
03:00
1时04分01秒
1时04分01秒
所以上面的时间戳应该变成短代码,例如
[spp-timestamp time ="(timestamp)"]
但不应触及现有的短代码
喜欢下面
[spp-timestamp time =" 1:05:01"]
[spp-timestamp time =" 01:05:01"]
[spp-timestamp time =" 4:00"]
[spp-timestamp time =" 15:00"]
[spp-timestamp time =" 05:00"]
以下是我使用的php和regex。
$pattern= '/(?!["\'])\b\d{1,2}:\d{2}(?::\d{2})?\b(?!["\'])/';
preg_match_all($pattern,$content, $matches);
foreach ($matches[0] as $time){
$shortcode = '[spp-timestamp time="'.$time. '"]';
$content = str_replace($time, $shortcode, $content);
}
}
这是我得到的结果。
Array ( [0] => Array ( [0] => 2:00 [1] => 10:00 [2] => 03:00 [3] => 1:04:01 [4] => 01:04:01 [5] => 1:05 [6] => 01:05 ) )
[spp-timestamp time="2:00"]
[spp-timestamp time="10:00"]
[spp-timestamp time="03:00"]
[spp-timestamp time="1:04:01"]
0[spp-timestamp time="1:04:01"]
Shortcode:
[spp-timestamp time="[spp-timestamp time="1:05"]:01"]
[spp-timestamp time="0[spp-timestamp time="1:05"]:01"]
[spp-timestamp time="4:00"]
[spp-timestamp time="15:00"]
[spp-timestamp time="05:00"]
不知道为什么从短代码中选择时间:(
另外这个时间戳01:04:01生成此shortocde意味着跳过ZERO。
0 [spp-timestamp time =" 1:04:01"]
更新
我想我知道为什么从短代码中选择时间。
正则表达式存在问题
(?!["'])\b\d{1,2}:\d{2}:\d{2}\b(?!["'])
我在正则表达方面没有多少经验。
以上是选择没有报价市场的时间戳但是它只使用MM:SS不使用HH:MM:SS
例如" 2:00"但它没有与" 00:00:00"
一起使用答案 0 :(得分:1)
这是因为替换功能。当你到达索引4(1:04:01)时,你正在替换' 1:04:01'在原始字符串中。它正在重播' 01:04:01'以及0被拒之门外。
您的问题没有解释为什么需要使用str_replace执行替换。您可以在正则表达式中使用replace方法。
使用preg_replace查找和替换。
我不确定输入,但假设它是文本。以下是您的代码
$text = "2:00 10:00 3:00 1:04:01 01:04:01";
$replacement = 'spp-timestamp time="${1}"';
$matches = preg_filter ('/(?!["\'])\b(\d{1,2}:\d{2})(?::\d{2})?\b(?!["\'])/',$replacement, $text);
print_r($matches);
以下是输出:
string 'spp-timestamp time="2:00" spp-timestamp time="10:00" spp-timestamp time="3:00" spp-timestamp time="1:04" spp-timestamp time="01:04"' (length=132)
请告诉我这是否符合您的预期。