使用 preg_replace 在 PHP 中删除两个字符串之间的文本

10

我一直在试图从一个字符串中删除两个标签之间的文本部分。例如:

This is CROPSTART not very CROPEND cool.

...应该变成这个...

This is cool.

这是我尝试过的PHP代码,并且通常它可以工作:

preg_replace('#\/\/CROPSTART[\s\S]+\/\/CROPEND#', '', $string);

然而,当字符串中包含多个“CROPEND”时,它会将从CROPSTART到最后一个CROPEND之间所有的内容都裁剪掉。我想要它只在第一个CROPSTART和第一个CROPEND之间进行裁剪。

有人知道如何做吗?

谢谢 Wonko


也许这可以帮助:https://dev59.com/Z0rSa4cB1Zd3GeqPZc-B - mmgross
是的,看起来对我来说是个重复问题,罪有应得。话虽如此,这里提供的答案简明扼要,易于理解。 - Wonko the Sane
1个回答

24
然而,当字符串包含多个"CROPEND"时,它会裁剪从CROPSTART到最后一个CROPEND之间的所有内容。这是因为你的"+"运算符是贪婪的——它不会在第一个出现的CROPEND处停止,而是继续直到遇到最后一个实例。你可以通过在"+"后面添加一个"?"来使用非贪婪版本的"+"运算符:
preg_replace('/CROPSTART[\s\S]+?CROPEND/', '', $string);

如果有这样的文本 "CROPSTART FirstWord CROPEND only this CROPSTART SecWord CROPEND",我想要获取的是 "only this",应该如何实现呢? - Tom Senner

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接