爆炸功能忽略空间特征

时间:2015-02-02 11:02:45

标签: php explode

php:

$str="M. M. Grice and B. H. Alexander and L. Ukestad ";
// I need to explode the string by delimiter "and"
$output=explode("and",$str);

输出:
M. M. Grice B. H. Alex

L. Ukestad

在名称“亚历山大”中有一个“和”,因此也被拆分了。 所以,我把它更改为$output=explode(" and ",$str)// as delimiter "and" has space.但它有效。

我在哪里做错了?我试过了$output=explode("\ and\ ",$str)。 但他们都没有工作

预期输出:
M. M. Grice B. H. Alexander
L. Ukestad

2 个答案:

答案 0 :(得分:0)

通过正则表达式更好地尝试这一点: preg_split("/\\sand\\s/i",$str);它会爆炸(AND&和)两者..

答案 1 :(得分:0)

问题中提供的代码:

$output=explode(" and ", $str);

是获得所需输出的正确方法。

当输入字符串and中的$str周围的字符不是常规空格(" " == chr(32))而是标签("\t" == chr(9)),换行符({ {1}})或其他空白字符。

可以使用"\n" == chr(10)分割字符串:

preg_split()

将使用任何空格字符包围的$output = preg_split('/\sand\s/', $str); 作为分隔符。

可以使用的另一个and是:

regex

这将使用单词$output = preg_split('/\band\b/', $str); 作为分隔符来分割$str,无论其中包含哪些字符(非字母,非数字,非下划线)。它会将and识别为问题中提供的字符串中的分隔符,但也会识别为and

不良副作用是"M. M. Grice and B. H. Alexander (and L. Ukestad)"周围的空格不是分隔符的一部分,它们将保留在拆分片段中。通过修剪preg_split()返回的部分可以很容易地删除它们:

and

将显示:

$str = "M. M. Grice and B. H. Alexander (and L. Ukestad)";
$output = array_map('trim', preg_split('/\band\b/', $str));
var_export($output);