前段时间,我采集了四万多条 壁纸 数据,格式类似下面那样:
-------------------a
1
2
3
-------------------b
ak
al
am
an
ao
ap
aq
ar
-------------------c
1
11
21
31
41
51
61
71
因为要导进mysql数据库,我想要的最终格式是这样:
a-1
a-2
a-3
b-ak
b-al
b-am
b-an
b-ao
b-ap
b-aq
b-ar
c-1
c-11
c-21
c-31
c-41
c-51
c-61
c-71
用sublime text3 搞翻了正则,连正则递归都学了 在sublime text3 还是不能实现。
(一个个搞,搞死人,就算用excel也麻烦。)
最后我写了一个PHP去处理这件事情:
<?php
$headPattern = '-*(\w)'; // 匹配头
$childPattern = '\r\n(\d+|\w+)'; // 匹配身体
$pattern = "/{$headPattern}((?:$childPattern)(?2)*)/";
// $pattern = "/-*(\w)((?:\r\n(\d+|\w+))(?2)*)/";
$subject = "
-------------------a
1
2
3
4
5
6
7
8
-------------------b
ak
al
am
an
ao
ap
aq
ar
-------------------c
1
11
21
31
41
51
61
71
";
echo preg_replace_callback($pattern, function ($e) use($childPattern) {
// 二次正则匹配
preg_match_all('/' . $childPattern . '/', $e[2], $match);
$result = '';
foreach ($match[1] as $key => $value) {
$result .= $e[1] . '-' . $value . "\n";
}
return $result;
}, $subject);
不解析,看代码。