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
答案 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);