我正在使用此代码来检测内容的时间戳。
$pattern = '/(<div\s+[^<]*?\bclass="[^<"]*\btimestamp\b[^<]*?>[^<]*)?(?<!:)\d{1,2}:\d{2}(?::\d{2})?(?!(?::\d{2})?\s*[ap]\.?m\.?)(?!.*?["\'])/';
$foundTimestamp = preg_replace_callback($pattern, array($this, 'spp_ts_callback'), $content);
function spp_ts_callback($m) {
return empty($m[1]) ? '[spp-timestamp time="'. $m[0] . '"]' : $m[0];
}
它适用于计划内容,例如
$content= '05:10 Hani shares some time-saving podcast automation tips';
但如果我只是在它旁边放一个链接就行不通了
$content='05:10 Hani shares some time-saving podcast automation tips <a href="http://wordpress.org">http://wordpress.org</a>';
答案 0 :(得分:0)
您原来的正则表达式:
/(<div\s+[^<]*?\bclass="[^<"]*\btimestamp\b[^<]*?>[^<]*)?(?<!:)\d{1,2}:\d{2}(?::\d{2})?(?!(?::\d{2})?\s*[ap]\.?m\.?)(?!.*?["\'])/
最后,你已经放了一个负面展望(?!。*?[&#34; \&#39;]),它与&#34; 标记相匹配......你的第二个内容有
&#34; http://w包含
引号......这就是为什么它没有被捕获。
刚刚删除了&#34;你的正则表达式标记:
(<div\s+[^<]*?\bclass="[^<"]*\btimestamp\b[^<]*?>[^<]*)?(?<!:)\d{1,2}:\d{2}(?::\d{2})?(?!(?::\d{2})?\s*[ap]\.?m\.?)(?!.*?[\'])