使用带有特殊字符的变量作为分隔符来分解字符串

时间:2014-11-19 15:58:28

标签: php

我有几个文件要打算复制到数据库,将信息分成几个表。所以我需要分解每一行来相应地分离信息。

当我只使用一个分隔信息的空间时它工作正常,但是现在我有很多文件,其中一些是空格,半冒号或某些情况下的标签。我在插入开始之前读取的另一个表中有分隔字符。

当我有\t需要爆炸时,问题就出现了。如果我强制爆炸功能,例如:

$line = explode("\t", trim($file[$j]));

它运作得很好。但是,当我尝试使用动态方式时:$rows['separator']包含" ";\t

$line = explode($rows['separator'], trim($file[$j]));

" ";工作正常,但\t没有。谁能告诉我为什么我似乎无法做到这一点?或者我如何解决这个问题?

我也尝试使用preg_split函数:

$line = preg_split($rows['separator'], trim($file[$j]));

但只是设法得到以下错误:

Warning: preg_split(): Delimiter must not be alphanumeric or backslash

2 个答案:

答案 0 :(得分:2)

使用preg_splt时,您应该添加一些斜杠来分隔模式:

$line = preg_split('/' . $rows['separator'] . '/', trim($file[$j]));

答案 1 :(得分:1)

你遇到的问题是双重的。

explode($separator, trim($file[$j]))不起作用,因为它试图拆分'反斜杠和t'(两个单独的字符在彼此之后)(= '\t')。要使其工作,需要拆分制表符(= "\t")。区别在于单引号是“哑”,即它们将\t视为两个单独的字符,而双引号是“智能”,即它们将\t视为单个字符“标签”。 / p>

preg_split($separator)不起作用,因为它需要对模式进行一些分隔,例如/。即使在分割简单的内容时也是如此,例如'a'

对于这个特殊问题,explode()是更合适的解决方案(更简单,更快)。如果您将$rows['separator']中的字符更改为"\t"(无论从哪里获取该值),explode()都应该有效。