我知道这对大多数人来说很容易,但对我来说不是,正则表达式让我很痛苦。
我需要的是替换"%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
标签。你需要分三步来完成。
查找所有标签:
preg_match_all('/(%s[^%]%s)/', $input, $matches);
找你的替代品。这取决于您的代码,但基本上只是通过
$matches
循环。替换标签,您可以通过将搜索和替换加载到数组中一批完成:
str_replace(array('%sone%s','%stwo%s'), array('uno', 'dos'), $input);
请注意,在可能的情况下,您应该始终尝试使用基本的字符串函数。正则表达式在处理和内存使用方面会产生开销,而这些开销在执行简单操作时是不必要的。