2012-03-23 201 views
0

我需要修改給定的字符串以僅包含字母數字字符,點(。)和逗號。 (。) 如果字符串包含除AZ,AZ,0-9或點之外的任何字符,就應該用逗號分隔符號代替,我使用的是這樣的:正則表達式(php) - 匹配非字母數字字符的塊

$string = "dycloro 987 stackOVERflow !|,!!friday"; 
$newstring = preg_replace('/[^a-zA-Z0-9\.]/', ',', $string); 

這種回報,

dycloro,987,計算器,,,,,,週五

但我需要的是得到,而不是下面。

dycloro,987,計算器,週五

(請注意 「|!,!!」 在$字符串部分被替換爲一個逗號符號)。 理想情況下,我想用一個逗號替換一個不允許的字符塊。 我發現 $newstring = preg_replace('/,{2,}/', ',', $newstring);用一個逗號代替了多個逗號符號。但是有沒有辦法以更快或更好的方式做到這一點? 如何在單個正則表達式匹配中執行此操作? 是否有任何進程時間或內存差異?這是正則表達式將運行在幾兆字節的用戶輸入,所以我很好奇它。

謝謝!

+1

你嘗試:'$ newstring = preg_replace函數( '/ [^ A-ZA-Z0-9 \] + /', '',$字符串); ' – piotrekkr 2012-03-23 13:17:16

+1

ruakh是對的。 RTFM! – Benubird 2012-03-23 13:17:42

回答

2

只需添加一個加號+,意思是「一個或一個以上就是我剛纔提到的」字符類後:

$string = "dycloro 987 stackOVERflow !|,!!friday"; 
$newstring = preg_replace('/[^a-zA-Z0-9\.]+/', ',', $string); 

http://www.php.net/manual/en/regexp.reference.repetition.php

+0

這就像一個魅力!非常感謝你!!! – 2012-03-23 13:21:17

2

嘗試這一個

$newstring = preg_replace('/[^a-zA-Z0-9\.]+/', ',', $string); 
+0

非常感謝!這實際上與ruakh的建議相同,但發佈時間有幾秒不同。非常感謝你! – 2012-03-23 13:23:23

相關問題