Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/298.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中使用正则表达式将字符串拆分为子字符串数组?_Php_Regex - Fatal编程技术网

如何在PHP中使用正则表达式将字符串拆分为子字符串数组?

如何在PHP中使用正则表达式将字符串拆分为子字符串数组?,php,regex,Php,Regex,我试图把一串二进制的1和0分成四个一组。在阅读了手册和帖子之后,我遗漏了一些东西: $subject = "101010101"; $pattern = "/.{1,4}/"; $blocks = preg_split ($pattern, $subject); print_r($blocks); 结果是一个空数组 Array ( [0] => [1] => [2] => [3] => ) php > 你得到这个结果是因为你

我试图把一串二进制的1和0分成四个一组。在阅读了手册和帖子之后,我遗漏了一些东西:

$subject = "101010101";

$pattern = "/.{1,4}/";

$blocks = preg_split ($pattern, $subject);

print_r($blocks);
结果是一个空数组

Array
(
    [0] =>
    [1] =>
    [2] =>
    [3] =>
)
php >

你得到这个结果是因为你匹配了1-4个字符进行分割。它将匹配字符串中的所有字符,不留下任何显示内容

如果要使用正则表达式将其分成4个组(最后一个是因为有9个字符),则可以使用字符类,而不是使用与除换行符以外的任何字符匹配的点,只使用0或1进行匹配

[01]{1,4}
|

结果

Array
(
    [0] => 1010
    [1] => 1010
    [2] => 1
)
返回一个数组,该数组包含沿模式匹配的边界拆分的主题的子字符串,失败时返回FALSE。。但您正试图从该字符串中获取1-4个字符组。因此可用于此目的:

$subject=“101010101”;
$pattern=“/[01]{1,4}/”;
preg_match_all($pattern,$subject,$match);
回显“”,打印($match[0]);

字符串中的任何字符都与您的模式匹配,换句话说,任何字符串都只包含分隔符。结果包含零大小的空间

要获得预期结果,您只需要捕获分隔符。您可以通过添加两个标志来实现这一点

$subject = "101010101";

$pattern = "/(.{1,4})/";

$blocks = preg_split ($pattern, $subject, null,  PREG_SPLIT_DELIM_CAPTURE);

print_r($blocks);

您可以设置
PREG\u SPLIT\u DELIM\u CAPTURE
标志以在输出中获取捕获的图案

如果设置了此标志,则分隔符模式中的括号表达式 也将被抓获并归还

注意:-您需要将模式添加到捕获组()中,以便将其放入输出中


您可以使用它将字符串拆分为大小为n的字符串数组

$subject=“101010101”;
$split=str_split($subject,4);
打印(拆分);
输出:

使用
regex
标识分隔符。这个工作不需要
regex
,因为它更快(更容易理解),所以更好。
$subject = "101010101";
$pattern = "/[01]{1,4}/";
preg_match_all($pattern, $subject, $match);

echo '<pre>', print_r($match[0]);
$blocks = preg_split ($pattern, $subject, -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY );
$subject = "101010101";

$pattern = "/(.{1,4})/";

$blocks = preg_split ($pattern, $subject, null,  PREG_SPLIT_DELIM_CAPTURE);

print_r($blocks);
Array
(
    [0] => 1010
    [1] => 1010
    [2] => 1
)