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