【问题标题】:PHP regex replace between wordpress shortcode tagPHP正则表达式替换wordpress短代码标签
【发布时间】:2014-04-16 22:02:42
【问题描述】:

我有一个简码,我希望能够根据帖子的上下文删除它。例如。

[tooltip slug="test"]Test Text[/tooltip]

我希望输出是:

<span class="dummy">Test Text</span>

我已经(很多!)使用 preg_replace 进行了实验,但我似乎无法让它识别出替换字符串位于 ']' 之间,然后由 '[/tooltip]' 分隔而不进行多次传递。

想法?

更新:正如经常发生的那样,在我写完这篇文章大约 10 秒后,我的一次尝试似乎奏效了。我认为它不如下面的解决方案好,但是 FWIW...

$my_var .= preg_replace('/(?:\[tooltip slug=\"([^\"]*)"[^\>]*\]([^\<]*)\[\/tooltip\])/', '<span class="dummy">\\2</span>', $my_post->post_content);

【问题讨论】:

标签: php regex preg-replace


【解决方案1】:

这是您正在寻找的简单正则表达式。

$result = preg_replace('%\[tooltip slug="[^"]*"]([^[]*)\[/tooltip]%',
          '<span class="dummy">\1</span>', $subject);

我们在这里所做的是捕获工具提示标签之间的文本,并将其插入替换中。 如果您需要任何详细信息,请告诉我。

【讨论】:

  • 谢谢。我在'slug ='['之后的括号里挣扎。我似乎只能让它作为 -two- 表达式工作。显然我没有足够的耐心来完成它。
  • @jchwebdev 正如您所看到的,不需要进行很多转义。一旦您对需要和不需要转义的内容感到满意,您的表达就会清晰得多。我建议不要使用斜杠 (/) 作为分隔符,根据情况使用 % 或 ~ 或 #。 html 中的斜线太多:它最终看起来像汤。很高兴您在角色类中使用 NOT (^)。您正在使用正则表达式。 :) 在这个阶段,您可能会受益于“Regex Style 的元素”一文。 rexegg.com/regex-style.html
  • 哇。这是一个很棒的教程。我看过很多,出于某种原因,这件事刚刚点击了。非常感谢。
【解决方案2】:
$test = preg_match('/\[([^\]]+)\]([^\[]+)\[/', '[tooltip slug="test"]Test Text[/tooltip]', $matches);

echo $matches[2];

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-09-18
    • 2012-04-27
    • 1970-01-01
    • 2012-01-02
    • 2011-11-20
    • 1970-01-01
    • 2012-07-06
    相关资源
    最近更新 更多