使用 preg_replace 删除 php 中两个字符串之间的文本
Deleting text between two strings in php using preg_replace
我一直在尝试从网站两个标签之间的字符串中删除一段文本。例如:
This is CROPSTART not very CROPEND cool.
...应该变成这样...
This is cool.
这是我试过的 PHP 并且通常有效:
preg_replace('#\/\/CROPSTART[\s\S]+\/\/CROPEND#', '', $string);
但是,当字符串包含多个 "CROPEND" 时,它会裁剪从 CROPSTART 到最后一个 CROPEND 的所有内容。我希望它只在第一个 CROPSTART 和 第一个 CROPEND 之间裁剪。
有人知道怎么做吗?
谢谢
旺科
However, when the string contains multiple "CROPEND" it crops everything from the CROPSTART to the last CROPEND.
这是因为您的 +
运算符是贪婪的 - 它不会在 CROPEND
的第一个实例处停止并继续直到遇到最后一个实例。
您可以使用 +
运算符的非贪婪版本,只需在其后附加 ?
即可:
preg_replace('/CROPSTART[\s\S]+?CROPEND/', '', $string);
我一直在尝试从网站两个标签之间的字符串中删除一段文本。例如:
This is CROPSTART not very CROPEND cool.
...应该变成这样...
This is cool.
这是我试过的 PHP 并且通常有效:
preg_replace('#\/\/CROPSTART[\s\S]+\/\/CROPEND#', '', $string);
但是,当字符串包含多个 "CROPEND" 时,它会裁剪从 CROPSTART 到最后一个 CROPEND 的所有内容。我希望它只在第一个 CROPSTART 和 第一个 CROPEND 之间裁剪。
有人知道怎么做吗?
谢谢 旺科
However, when the string contains multiple "CROPEND" it crops everything from the CROPSTART to the last CROPEND.
这是因为您的 +
运算符是贪婪的 - 它不会在 CROPEND
的第一个实例处停止并继续直到遇到最后一个实例。
您可以使用 +
运算符的非贪婪版本,只需在其后附加 ?
即可:
preg_replace('/CROPSTART[\s\S]+?CROPEND/', '', $string);