2013-12-09 136 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); 
    

作爲一個說明,你應該總是嘗試使用基本字符串函數時可能。在執行簡單操作時,正則表達式會在處理和內存使用時產生開銷,而這些操作不需要。