PHP:split/explode在结果数组中不返回分隔符
当前字符串:“m,d-y” 我想用d,m和y来分割/分解它 处理后,我应获得:PHP:split/explode在结果数组中不返回分隔符,php,regex,Php,Regex,当前字符串:“m,d-y” 我想用d,m和y来分割/分解它 处理后,我应获得: array[0] = "m"; array[1] = ", "; array[2] = "d"; array[3] = " - "; array[4] = "y"; 如何做到这一点?Split和explode正在从返回的数组中删除我的分隔符。只需根据之前存在的边界(d或m或y)或d或m或y $str = "m, d - y"; $match = preg_split('~(?<=[dmy])(?!$)|(?&
array[0] = "m";
array[1] = ", ";
array[2] = "d";
array[3] = " - ";
array[4] = "y";
如何做到这一点?Split和explode正在从返回的数组中删除我的分隔符。只需根据之前存在的边界(
d
或m
或y
)或d
或m
或y
$str = "m, d - y";
$match = preg_split('~(?<=[dmy])(?!$)|(?<!^)(?=[dmy])~m', $str);
print_r($match);
说明:
(?您可以使用
并匹配分隔符和其他分隔符,但分隔符周围有空格的情况除外preg\u match\u all
使用正则表达式/[dmy]\s*[^dmy]\s*/
支持在最终结果中包含分隔符捕获部分的选项preg\u split
preg\u split\u DELIM\u CAPTURE
$result = preg_split('~([mdy])~', $str, -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);
选项,从结果数组中删除空字符串。SPLIT和Explode并不意味着返回分隔符。我认为这里最好使用的函数是PREG\u match: 因此,您可以定义括号内的字符组,这些字符组应该被“grep'd”放入结果数组的一项中 这里模式的基本思想是交替使用相同的字符组[-,]和不使用否定^。请注意,字符-需要转义\因为它在字符类[]中有特殊含义 [编辑:今天学到了一些东西:preg_split有一个很酷的选择。多亏其他人提到了这一点。下面是两种解决方案的比较。]PREG\u SPLIT\u NO\u EMPTY
<?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>");
您应该使用
我也建议preg\u match
但是对该方法的一些解释会很有用。@Avinash Raj只有一个问题,如果我想查找%m,而不是像“m”这样的单个字符,该怎么办?只需在char类前面添加preg\u split
(?@Avinash Raj谢谢,帮助我更好地理解regexp。%
<?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>");