我知道这已经得到解答,但是,你可以用一个命令来做到这一点:
$input = "foo, bar, baz., shibby, poop.";
//-- handles it all in one pass
$output = preg_split('/[\.,\s]/', $input, -1, PREG_SPLIT_NO_EMPTY);
//-- just output
array_walk($output, function(&$item, $idx) {
echo $idx . ': ' . $item . PHP_EOL;
});
但是,如果您希望值中有空格,这也会将它们分开。我刚刚添加\s
到正则表达式来修剪元素。如果您希望值中有空格,则省略\s
正则表达式中的 和trim()
稍后的元素。
或者,这个正则表达式将产生相同的结果:/(\.\s?|,\s?)/
$input = "foo, bar, baz., shibby, poop. foo bar";
//-- handles it all in one pass
$output = preg_split('/(\.\s?|,\s?)/', $input, -1, PREG_SPLIT_NO_EMPTY);
//-- just output
array_walk($output, function(&$item, $idx) {
echo $idx . ': ' . $item . PHP_EOL;
});
生产
0: foo
1: bar
2: baz
3: shibby
4: poop
5: foo bar
正则表达式:解释
原始的正则表达式只是简单地分割字符串中的单个字符,如[
and表示]
。因此,/[\.,\s]/
匹配字符串中的句点、逗号和空格字符。想了想,这可能不是你想要的,但很接近。
更新后的正则表达式略有不同,分为两种不同的场景。\.\s?
说:拆分期间和/或前段+空格。使?
前面的可选(我相信 0 或 1)。与,\s?
. 匹配逗号和/或逗号+空格。这说明了所有场景。使用分组 ( (...)
) 而不是字符范围可以实现这一点。|
中间的管道表示 OR 所以,完整的正则表达式表示:匹配句点和/或句点+空格或逗号和/或逗号+空格。