【问题标题】:Convert timestamp to wordpress shortcode将时间戳转换为 wordpress 简码
【发布时间】:2017-12-31 07:52:39
【问题描述】:

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

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

【问题讨论】:

  • 但你还没有把从中获取内容的 div 放在...但是在你的正则表达式中你有 div ???
  • 是的,我有 div,这意味着它不会检测到哪个 div 具有“timestamp”类的时间戳

标签: php regex wordpress


【解决方案1】:

你原来的正则表达式:

/(<div\s+[^<]*?\bclass="[^<"]*\btimestamp\b[^<]*?>[^<]*)?(?<!:)\d{1,2}:\d{2}(?::\d{2})?(?!(?::\d{2})?\s*[ap]\.?m\.?)(?!.*?["\'])/

最后,您已将否定的外观 (?!.*?["\']) 与 " 标记匹配...并且您的第二个内容具有

"http://w 其中包含

引号...这就是它没有被捕获的原因。

刚刚从您的正则表达式中删除了 " 标记:

(<div\s+[^<]*?\bclass="[^<"]*\btimestamp\b[^<]*?>[^<]*)?(?<!:)\d{1,2}:\d{2}(?::\d{2})?(?!(?::\d{2})?\s*[ap]\.?m\.?)(?!.*?[\'])

Demo

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-20
    • 1970-01-01
    • 2013-04-07
    • 2011-01-15
    • 1970-01-01
    • 2018-10-21
    相关资源
    最近更新 更多