php 正则表达式帮助,删除以 [caption id= 开头的字符串
Posted
技术标签:
【中文标题】php 正则表达式帮助,删除以 [caption id= 开头的字符串【英文标题】:php regex help, removing a string that starts with [caption id= 【发布时间】:2017-02-27 09:45:20 【问题描述】:在正则表达式方面需要帮助。我有一大串 html,需要删除这样的标签
[caption id="attachment_24612" align="alignnone" ]
每个标签都以相同的[caption id=
开头,以相同的]
结尾……但中间的内容每次都是唯一的。正则表达式代码应该是这样的,但我不知道如何匹配中间
$sourceHTML = preg_replace(array("[caption id=", ""),"", $sourceHTML);
提前感谢您的帮助。
【问题讨论】:
【参考方案1】:要删除那些 caption 标签,你可以使用这个正则表达式:
\[caption[^]]+]
See the demo
如果您的标签在单行上,并且您想删除前一个正则表达式可以留下的空白行,请考虑使用这个:
\[caption[^]]+]\R?
\R?
部分将匹配标记后可能出现的换行符。
See the demo
示例
$sourceHTML = preg_replace("/\[caption[^]]+]\R?/", "", $sourceHTML);
【讨论】:
顶部图案非常瘦。品质创造。搜索one-or-more not closing square bracket
(11steps,~0ms) 优于 non-greedy one-or-more dot
(62steps,~4ms),因为引擎只需检查一个包含 1 个字符的列表,而不是一个点代表的多个字符。我将来会使用这个优化。 +1 最佳逻辑。【参考方案2】:
改用这个:
$sourceHTML = preg_replace("/\[caption id=(.*?)\]/", "", $sourceHTML);
【讨论】:
编辑为使用 (.*?) 而不是 (.*) 以避免意外替换 这个答案的正则表达式模式不如 Niitaku 的第一个模式。注意:\sid=
和捕获组()
是不必要的。 Niitaku 的成功模式只使用了 11 个步骤(~0ms),而这个答案使用了 113 个步骤(~29ms)。
不客气,Luke,您可以将答案标记为正确并投票以提供帮助^__^以上是关于php 正则表达式帮助,删除以 [caption id= 开头的字符串的主要内容,如果未能解决你的问题,请参考以下文章