Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP:split/explode在结果数组中不返回分隔符_Php_Regex - Fatal编程技术网

PHP:split/explode在结果数组中不返回分隔符

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])(?!$)|(?&

当前字符串:“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])(?!$)|(?<!^)(?=[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);
    

    PREG\u SPLIT\u NO\u EMPTY
    选项,从结果数组中删除空字符串。

    SPLIT和Explode并不意味着返回分隔符。我认为这里最好使用的函数是PREG\u match:

    因此,您可以定义括号内的字符组,这些字符组应该被“grep'd”放入结果数组的一项中

    这里模式的基本思想是交替使用相同的字符组[-,]和不使用否定^。请注意,字符-需要转义\因为它在字符类[]中有特殊含义

    [编辑:今天学到了一些东西: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>");
    

    您应该使用
    preg\u match
    我也建议
    preg\u split
    但是对该方法的一些解释会很有用。@Avinash Raj只有一个问题,如果我想查找%m,而不是像“m”这样的单个字符,该怎么办?只需在char类前面添加
    %
    (?@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>");