我试图用preg_split分割字符串。这是字符串的一个示例:
111235622411
我希望输出像这样:
$arr[0] = "111";
$arr[1] = "2";
$arr[2] = "3";
$arr[3] = "5";
$arr[4] = "6";
$arr[5] = "22";
$arr[6] = "4";
$arr[7] = "11";
因此,如果一个接一个地使用相同的字符,我希望它们在同一个" chunk"中。我无法想出我应该使用的正则表达式。如果有些条款错误,我很抱歉,因为我以前用PHP编码已经有一段时间了。
答案 0 :(得分:3)
我会使用preg_match_all()
:
$string = '111235622411';
preg_match_all('/(.)\1*/', $string, $matches);
var_dump($matches[0]);
\1
引用先前捕获的组(.)
(任何单个字符)。此功能称为back referencing。正则表达式重复先前匹配的字符 - 贪婪*
意味着它匹配尽可能多的相同字符,问题中所需的字符。
输出:
array(8) {
[0]=>
string(3) "111"
[1]=>
string(1) "2"
[2]=>
string(1) "3"
[3]=>
string(1) "5"
[4]=>
string(1) "6"
[5]=>
string(2) "22"
[6]=>
string(1) "4"
[7]=>
string(2) "11"
}
答案 1 :(得分:1)
您可以使用此正则表达式:
(.)(?=\1)\1+|\d
而不是拆分它,参加比赛。
$matches = null;
$returnValue = preg_match_all('/(.)(?=\\1)\\1+|\\d/', '111235622411', $matches);
$matches[0]
将包含您想要的内容。正如@ hek2mgl建议的那样,您也可以使用更简单的/(\d)\1*/
答案 2 :(得分:0)
以下是一个简单的解决方案,包括执行preg_match_all:
这种情况下的正则表达式是:
(\d)\1*
正则表达式的含义:
php代码将是:
$re = "/(\\d)\\1*/";
$str = "111235622411";
preg_match_all($re, $str, $matches);
print_r($matches[0]);
您可以访问第一个匹配组,即" 111"像这样:$ matches [0] [0],第二个是" 2"喜欢这个$匹配[0] [1],依此类推。点击此处Demo查看一个有效的示例。
希望它有用!