我有一個PHP變量,說PHP正則表達式的解決方案 - 刪除一些特殊字符和替換一些文本
$myvariable = "te [email protected] na#@)(me+=&t^*ext?>;.'na^%me";
我要替換特殊字符和組包括與一個空格特殊字符下劃線_
。該字符串可能包含&
,它可能會替換爲and
。
以前變量的結果應該是;
te_xt_na_me_andt_ext_na_me
我該如何在PHP中做到這一點?
我有一個PHP變量,說PHP正則表達式的解決方案 - 刪除一些特殊字符和替換一些文本
$myvariable = "te [email protected] na#@)(me+=&t^*ext?>;.'na^%me";
我要替換特殊字符和組包括與一個空格特殊字符下劃線_
。該字符串可能包含&
,它可能會替換爲and
。
以前變量的結果應該是;
te_xt_na_me_andt_ext_na_me
我該如何在PHP中做到這一點?
這個假設,任何東西但「字符」被視爲一次性。
$patterns = array(
'/&/' => 'and', // Ampersand to "and"
'/[^[:alpha:]]+/' => '_' // Anything *but* a character to underscore
);
$result = preg_replace(array_keys($patterns), array_values($patterns), $input);
最後圖案根據當前區域(並因此包括空格)取代的「無字」字符的一個或多個出現次數的組。
側面說明(可能是無關緊要的):如果腳本上運行的服務器具有en_US
的區域,會出現如下替換:
$input = 'app!le___s &! orän=%ges';
$result = 'app_le_s_and_or_n_ges';
如果區域設置爲de_DE
,這將結果:
$result = 'app_le_s_and_orän_ges';
由於ä
是[[:alpha:]]
部分在此特定LO卡爾。解決這個問題的顯而易見的解決方案是將字符類替換爲[a-zA-Z]
。
這應該這樣做:
$myvariable = str_replace('&','and',$myvariable)
$myvariable = preg_replace ('/[^a-z]+/i', '_' , $myvariable)
見:http://php.net/manual/de/function.preg-replace.php
的方括號內插入符號(^)意味着尋找一切,是不是在括號內聲明。所以每個特殊字符都不是「a-z」。正信號表示多個事件應該匹配。劃定斜線後面的'i'表示進行不區分大小寫的搜索。
+1首先使用'str_replace()' – 2012-03-15 19:10:10
這很有用。你能告訴我如何保留最後一個點「。」。在字符串中,如果有的話,假設像擴展名的文件名。 – 2012-03-15 19:39:51