当前字符串:“m,d - y”。
我想用d,m和y分割/爆炸。
处理后我应该得到:
array[0] = "m";
array[1] = ", ";
array[2] = "d";
array[3] = " - ";
array[4] = "y";
怎么做?拆分和爆炸将从返回的数组中删除我的分隔符。
答案 0 :(得分:1)
根据之前存在的边界(d
或m
或y
)或d
或m
之后存在的边界分割输入或y
$str = "m, d - y";
$match = preg_split('~(?<=[dmy])(?!$)|(?<!^)(?=[dmy])~m', $str);
print_r($match);
输出:
Array
(
[0] => m
[1] => ,
[2] => d
[3] => -
[4] => y
)
<强>解释强>
(?<=[dmy])
立即关注[dmy]
并且匹配(?!$)
后面不会有行结束。这样可以避免匹配最后存在的边界。
(?=[dmy])
匹配d或m或y之前存在的所有边界,但匹配不会在aline的开头。
答案 1 :(得分:0)
您可以使用preg_match_all
并匹配分隔符和分隔符,但分隔符除外围有分隔符。
使用正则表达式/[dmy]|\s*[^dmy]\s*/
答案 2 :(得分:0)
preg_split
支持选项PREG_SPLIT_DELIM_CAPTURE
,其中包含最终结果中捕获的分隔符部分。
$result = preg_split('~([mdy])~', $str, -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);
PREG_SPLIT_NO_EMPTY
选项,从结果数组中删除空字符串。
答案 3 :(得分:0)
拆分和爆炸并不意味着返回分隔符。我说这里使用的最佳功能是preg_match:
http://php.net/manual/de/function.preg-match.php
因此,您可以定义括号中的字符组,这些字符应该得到&#34; grep&#39; d&#34;到结果数组的一个项目。
这里模式的基本思想是交替使用相同的字符组[ - ,],有或没有否定^。请注意,char - 需要一个转义\因为它在字符类[]中的特殊含义。
[编辑:今天学到了一些东西:preg_split有一个很酷的选择。感谢其他人提到这一点。现在有两种比较解决方案。]
<?php
$input = "m, d - y";
preg_match ("/([^ ,\-]+)([,\- ]+)([^ ,\-]+)([,\- ]+)([^ ,\-]+)/", $input, $result);
$result2 = preg_split ("/([\-\s,]+)/", $input, -1, PREG_SPLIT_DELIM_CAPTURE);
print ("<pre>");
var_dump ($result);
var_dump ($result2);
print ("</pre>");