通过匹配模式对字符串进行分组

Group Strings by matching pattern

我正在寻找一种方法来对具有匹配模式的字符串进行分组(例如,在数组中)。 例如,我有一个以这些字符串作为键的关联数组:

1111567
1111568
1111608
2222345
2222495

现在我想遍历字符串数组并将所有“1111”、“2222”等分组。

(((\d){1,})\d+(?:(?:\n|$)\d+)*)

尝试 this.Grab 捕获 1 或组 1.See 演示。

https://regex101.com/r/vD5iH9/70

$re = "/(((\d)\3{1,})\d+(?:(?:\n|$)\2\d+)*)/i";
$str = "1111567\n1111568\n1111608\n2222345\n2222495";

preg_match_all($re, $str, $matches);

不确定是否了解您的需求,但如何:

$arr = array(
    '1111567' => 'a',
    '1111568' => 'b',
    '1111608' => 'c',
    '2222345' => 'd',
    '2222495' => 'e',
);
$res = array();
foreach ($arr as $k => $v) {
    preg_match('/^(\d{4})/', $k, $m);
    $res[$m[1]] .= $v;
}
print_r($res);

输出:

Array
(
    [1111] => abc
    [2222] => de
)