2011-03-17 129 views
1

我在PHP中遇到RegEx問題,似乎無法找到答案。正則表達式查找並替換

我有一個字符串,這是3個字母,全部大寫,即COS。

字母會改變,但永遠是3個字符長,帽,這也將是在另一串的中心,四周逗號。

我需要一個正則表達式查找字符串中3次蓋帽函件及COS cahnge他們「COS」 (IM這樣做是爲了修改一個SQL INSERT字符串)

我似乎無法找到正則表達式除非我使用spercifit字母,但字母會改變。

我需要沿 [A-Z]線的東西{3}然後替換爲 '[A-Z]'(我知道這個心不是anywere接近正確的,只是簡寫)

任何人有什麼建議?

乾杯

編輯:

只想添加櫃面有人來翻過這個問題,在以後的日子:

SQL插入字符串(從外部源和ftp的到我的服務器每天提供) 包含3個大寫字符串兩次,一次用逗號和一次出局 ,所以我不得不刪除從第一個regEx

 
$sqlString = preg_replace('/([A-Z]{3})/', "'$1'", $isqlString); 
$sqlString = preg_replace('/\'\'([A-Z]{3})\'\'/', "'$1'", $sqlStringt); 

Thanks everyone

+0

您應該首先修復生成SQL字符串的函數。 – Gordon 2011-03-17 13:23:39

+0

你的問題解決了嗎? – 2011-03-17 13:28:37

+0

是的,你已經解決了它完美,謝謝。 Iv選擇你的答案是正確的。歡呼 – atmd 2011-03-17 14:20:16

回答

1

You were actually very close. You could use:

echo preg_replace('/([A-Z]{3})/', "'$1'", 'COS'); //will output 'COS'


For MySQL statements I would advise to use the function mysql_real_escape_string()加入的雙逗號。

+0

它也取決於字符串中的其他內容 - 如果您知道這3個大寫字母在逗號內(如無空格,COS),那麼您可以進一步限制替換,如下所示:preg_replace('/,( [AZ] {3}),/',「,'$ 1',」); – 2011-03-17 13:25:52

+0

謝謝這讓我走上了正確的道路。 – atmd 2011-03-17 13:35:44

+0

@DAVIEAC:不客氣。 – 2011-03-17 13:38:48

0
preg_replace('/(^|\b)([A-Z]{3})(\b|$)/', "'${2}'", $string); 
+0

您確實需要指定文字邊界,否則「ABC,COSTARICA,XYZ」將會有3個以上的替換項。查看http://us3.php.net/manual/en/function.preg-replace.php瞭解更多詳情。 – anubhava 2011-03-17 13:28:40