将时间戳转换为wordpress短代码

时间:2017-12-31 07:52:39

标签: php regex wordpress

我正在使用此代码来检测内容的时间戳。

  $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>';

1 个答案:

答案 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\.?)(?!.*?[\'])

Demo