如何在PHP中使用正则表达式将字符串拆分为子字符串数组?
我试图把一串二进制的1和0分成四个一组。在阅读了手册和帖子之后,我遗漏了一些东西:如何在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 > 你得到这个结果是因为你
$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
)