首页 > 解决方案 > 按模式删除部分字符串

问题描述

我有一个字符串。我需要删除render_dynamic_content(,留下文本,然后)从字符串中删除下一个。图案内的文字可以不同。
例子:

some ( text {{ render_dynamic_content(dynamic_html.POS_A_IMG) }} another ) text {{ render_dynamic_content(dynamic_html.POS_B_IMG) }}

预期结果应该是:

some ( text {{ dynamic_html.POS_A_IMG }} another ) text {{ dynamic_html.POS_B_IMG }}

我正在努力:

$string = 'some ( text {{ render_dynamic_content(dynamic_html.POS_A_IMG) }} another ) text {{ render_dynamic_content(dynamic_html.POS_B_IMG) }}';
$content = preg_replace('/render_dynamic_content([\s\S]+?)/', '', $string);

结果是:

some ( text {{ dynamic_html.POS_A_IMG) }} another ) text {{ dynamic_html.POS_B_IMG) }}

我需要在)之后dynamic_html.POS_A_IMG删除dynamic_html.POS_B_IMG

标签: phpstring

解决方案


你很接近,但你需要在你的模式中包含(和转​​义)括号,然后将捕获的部分(你想要保留的部分)放入替换而不是空字符串。

$string = 'some ( text {{ render_dynamic_content(dynamic_html.POS_A_IMG) }} another ) text {{ render_dynamic_content(dynamic_html.POS_B_IMG) }}';
$content = preg_replace('/render_dynamic_content\(([\s\S]+?)\)/', '\1', $string);

echo $content;

演示

注意:其他一些模式可能会也可能不会更有效。出于此答案的目的,我不会尝试对其进行优化。


推荐阅读