分解函数忽略 space 个字符

Explode function ignores space character

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.格莱斯
B.H.亚历克斯

L.乌克斯塔德

名字"Alexander"中有一个"and"所以也被拆分了。 所以,我将其更改为 $output=explode(" and ",$str)// as delimiter "and" has space. 但它确实有效。

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

预期输出:
M.M.格莱斯
B.H.亚历山大
L.乌克斯塔德

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

问题中提供的代码:

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

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

当输入字符串$strand周围的字符不是正则spaces(" " == chr(32))而是制表符("\t" == chr(9))、换行符 ("\n" == chr(10)) 或其他白色 space 字符。

字符串可以使用preg_split()拆分:

$output = preg_split('/\sand\s/', $str);

将使用 and 包围任何白色 space 字符作为分隔符。

另一个可以使用的regex是:

$output = preg_split('/\band\b/', $str);

这将使用单词 and 作为分隔符来拆分 $str,无论它周围有什么字符(非字母、非数字、非下划线)。它会将 and 识别为问题中提供的字符串中的分隔符,但也会识别 "M. M. Grice and B. H. Alexander (and L. Ukestad)".

中的分隔符

一个不受欢迎的副作用是 and 周围的 space 不是定界符的一部分,它们将保留在拆分片段中。通过修剪 preg_split():

返回的片段,可以轻松移除它们
$str = "M. M. Grice and B. H. Alexander (and L. Ukestad)";
$output = array_map('trim', preg_split('/\band\b/', $str));
var_export($output);

将显示:

array (
  0 => 'M. M. Grice',
  1 => 'B. H. Alexander (',
  2 => 'L. Ukestad)',
)