2015-07-11 40 views
1

在我的腳本中,我用引號+空格替換了所有「,」逗號。Str_replace替代以下字符串的PHP

但是,當涉及到像3,456,778這樣的數字時,它也會將逗號轉換爲引號+空格。有沒有辦法添加到命令忽略大的數字一樣,所以它不會將其轉換爲:

3" 456" 778" 

如果quotationm +空間+任何編號,然後轉換報價+空格逗號..我的意思我知道如何與str_replace命令做到這一點,但我不知道如何選擇任何數字0-9。 有幫助嗎?將其轉換爲:

3,456,778 

我想我需要詳細說明一些。我需要轉換這樣的文字:

Value=3,456,778,id=777 

要:

Value=3,456,778" id=777" 

但問題是,它也轉換的中間逗號的數字之間。 因此,即使我可以將str_replace命令更改爲 「如果逗號不在兩個數字之間,那麼只會將逗號轉換爲引號+空格」。這將是很好的。可能嗎?

+0

使用'preg_replace'並使用負向前視,因此如果逗號位於數字之前,則不匹配。 – Barmar

回答

2

這個是什麼?

preg_replace("/,([^0-9]|$)/", "\"$1", $text); 

這將匹配除逗號後面跟數字的所有文本。

舉例來說,這樣的:

$text = "123,23 adas , asdsa d, asdasd sa 1234,234324,asdas 324324 234,"; 
echo $text; echo "<br/>"; 
echo preg_replace("/,([^0-9]|$)/", "\"$1", $text); 

會響應這樣的:

123,23 adas , asdsa d, asdasd sa 1234,234324,asdas 324324 234" 
123,23 adas " asdsa d" asdasd sa 1234,234324"asdas 324324 234" 
+0

那麼| $和$ 1代表什麼? – Kesh

+0

這個'([^ 0-9] | $)'表示「除了數字或字符串結束之外的任何東西」。 「$ 1」是括號內的正則表達式。所以'$ 0'將是整個匹配文本,'$ 1'就是括號之間的內容。 – Mindastic

-1

從描述中不明確你實際上想要做什麼。

這可能是進了一步朝着正確的方向,但是:

preg_replace('/([0-9]+)" /', '\\1,', '3" 456" 778"'); 
+1

他_doesn't_想要在數字內部轉換逗號。 – Barmar

-1

不是最好的,也許解決方案,但可以試試看。

$copy_date = '3" 456" 778"'; 
$copy_date = preg_replace("(\"\s{1})", ",", $copy_date); 

$copy_date1 = preg_replace("(\")", "", $copy_date); 
print $copy_date1; 

o/p:3,456,778 
+1

他不是從一個有引號的數字開始,他是從一個用引號+空格替換逗號的過程中獲得的。他的問題是如何防止這種情況發生。 – Barmar