繁体   English   中英

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

[英]How can I split a string into an array of substrings with regular expressions in PHP?

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

$subject = "101010101";

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

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

print_r($blocks);

结果是一个空数组。

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

您可以使用str_split()将字符串拆分为大小为n的字符串数组。

$subject = "101010101";
$split = str_split($subject, 4);
print_r($split);

输出:

Array
(
    [0] => 1010
    [1] => 1010
    [2] => 1
)

得到该结果是因为您要匹配1到4个字符以进行拆分。 它将匹配字符串中的所有字符,不显示任何内容。

如果你想使用正则表达式将其分解为4个组(最后一个因为有9个字符)你可以使用preg_match_all并使用字符类仅匹配0或1而不是使用匹配任何字符的点除了换行符。

[01]{1,4}

正则表达式演示 | Php演示

$subject = "101010101";
$pattern = "/[01]{1,4}/";
$blocks = preg_match_all ($pattern, $subject, $matches);

print_r($matches[0]);

结果

Array
(
    [0] => 1010
    [1] => 1010
    [2] => 1
)

preg_split()返回一个数组,其中包含沿着与pattern匹配的边界分割的主题的子串,或者在失败时返回FALSE。但是你试图从该字符串中抓取1-4个字符组。 因此preg_match_all()可用于此目的。 示例

$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 );

演示

您可以设置PREG_SPLIT_DELIM_CAPTURE标志以在输出中获取捕获的模式

如果设置了此标志,则将捕获并返回分隔符模式中的带括号的表达式。 PHP reference

注意: -您需要将模式添加到捕获组()以获取输出


$subject = "101010101";

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

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

print_r($blocks);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM