2013-12-09 96 views
0

我知道它很容易为大多数人,但它不适合我,正则表达式的痛苦我很多。PHP替换字符串中的特殊字符

我需要的是更换里面的所有字符串“%s”的......“%s”的一个元素:

原:我已阅读并接受预订%S

%STHE条款

我想是更换所有的“预订的%s%STHE术语”类似:提前

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

感谢。

PD:文本对 '%s' 内 - 这取决于用户的语言 '%s' 的变化,所以一个简单的str_replace函数是不是在这种情况下,解决方案

+0

'str_replace'是很不够的任务给出。 – raina77ow

+0

没有它不行,因为里面的文本“%s”的并不总是相同的,它的变化取决于用户所使用的 –

+0

“任务给出”语言在这里是关键。如果你有多个表达(和/或不知道所有的人),使用'的preg_replace( '/%S [^%] +%S /', 'string_to_replace',$ your_string)'。 – raina77ow

回答

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

$输出:

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

谢谢,正是我所需要的 –

0

我假设你一起黑客一个基本的模板系统,并希望替换所有在字符串中%s...%s标签而不必知道它的存在。你需要分三步完成。

  1. 找到所有的标签:

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

  3. 通过加载你的搜索和替换成阵列更换标签,你可以在一个批次做到这一点:

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

作为一个说明,你应该总是尝试使用基本字符串函数时可能。在执行简单操作时,正则表达式会在处理和内存使用时产生开销,而这些操作不需要。