PHP替换特殊字符中的字符串


PHP replace string inside special characters

我知道这对大多数人来说很容易,但对我来说不是,正则表达式让我很痛苦。

我需要的是替换"%s"…"%"中的所有字符串s表示元素:

原件:我已阅读并接受%s 的预订条款

我想要的是用之类的东西替换所有的"%s预订条款"

<a href="..." id="enlaceCondiciones" target="_blank" >Condiciones de venta</a>

提前谢谢。

PD:"%s"-"%s"中的文本会根据用户语言的不同而变化,因此在这种情况下,简单的str_replace不是解决方案

$output = preg_replace("/%s(.+)%s/", "<a href="..." id="enlaceCondiciones" target="_blank" >$1</a>", '%sthe terms of booking%s');

$output:

<a href="..." id="enlaceCondiciones" target="_blank" >the terms of booking</a>

我假设您正在拼凑一个基本的模板系统,并希望在不必知道哪些标签存在的情况下替换字符串中的所有%s...%s标签。你需要分三步来完成。

  1. 查找所有标签:

    preg_match_all('/(%s[^%]%s)/', $input, $matches);
    
  2. 找你的替代品。这取决于您的代码,但基本上只是通过$matches循环。

  3. 替换标签,您可以通过将搜索和替换加载到数组中一批完成:

    str_replace(array('%sone%s','%stwo%s'), array('uno', 'dos'), $input);
    

请注意,在可能的情况下,您应该始终尝试使用基本的字符串函数。正则表达式在处理和内存使用方面会产生开销,而这些开销在执行简单操作时是不必要的。