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= 开头的字符串的主要内容,如果未能解决你的问题,请参考以下文章

php 正则表达式匹配不以某些字符开始的字符串

10个常用的PHP正则表达式

正则表达式:删除包含“帮助”等的行

无法在正则表达式和 nltk 的帮助下删除特殊字符

php正则表达式删除HTML

PHP PHP正则表达式 - 从字符串中删除特殊字符