2013-10-19 97 views
1

我需要用\t替換第一列和第二列以及第二列和第三列之間的空格。正則表達式用製表符替換空格

0101 A 01/13/13 
0102 F 04/05/13 
0209 C 04/19/13 

但我無法這樣做,是把它們都放在一個行,寫出\t代替。

preg_replace('/(?:^|\s)/', '\t', $text); 

其打印出來作爲左右....

\t0101\tA\t01/13/13\t\t .... 

我怎麼能正確地以正確的格式得到這個?

任何幫助表示讚賞。

+1

'str_replace('',「\ t」,$ string)'不起作用? –

+0

看到每個人都在正則表達式問題上跳起來很有趣......:^)解決它們的方法很多。 – beroe

回答

3

如果你的數據是在嚴格的格式,這樣,爲什麼不

preg_replace('/\s+(.)\s+/', "\t$1\t", $text); 
+0

感謝您的語法調整 - PHP是不是我的第一個語言遠射:)。 – Josh

+0

如果有任何額外空間的可能性(例如,不同數量的前導數字),我認爲編輯前是「更安全」的,原始\ w而不是'。「 – beroe

+0

是啊......其實我沒有注意'.'直到我發佈評論。我已經用'\ w'離開了它,但是如果格式真的是一致的,那麼很好。 – Josh

3

只需搜索字面空間並用\t替換...除非您的數據變化不止這些,否則(?:)都不是必需的。

還有其他空間嗎?有更多的專欄?

preg_replace('/ /',"\t", $text); 

如果我做一個test.php的文件有:

<pre> 
<?php 
$t="0101 A 01/13/13\n0102 F 04/05/13\n0209 C 04/19/13"; 
printf(preg_replace('/ /',"\t",$t)); 
?> </pre> 

它會產生這樣的:

0101 A 01/13/13 
0102 F 04/05/13 
0209 C 04/19/13 
+0

+1這是最簡單的方法。 – hwnd

+1

這基本上是'str_replace('',「\ t」,$ text);' –

+0

@Jack是的,在我測試它在我的系統上工作後。 – hwnd