棘手的大数据处理问题(正则表达式)

前段时间,我采集了四万多条 壁纸 数据,格式类似下面那样:

-------------------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);

不解析,看代码。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值