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


Use a variable with special characters as delimiter to explode a string

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

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

当我有一个需要爆炸的'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

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

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

您遇到的问题是双重的。

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

preg_split($separator)不起作用,因为它需要模式的一些分隔符,例如 / .即使在简单的事情上分裂也是如此,例如'a'.

对于这个特定问题,explode()是更合适的解决方案(更简单且速度稍快)。如果将 $rows['separator'] 中的字符更改为 "'t"(无论从何处获取该值),explode()应该有效。