2013-10-19 52 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