[英]How to search a string for substrings that can be in any order using regular expressions in 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}
$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.