干什么不好,非要做程序员,真是败家。

编程无边 回头是岸 本来无一物 何处惹尘埃 QQ:2281551151

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

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

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

不解析,看代码。

阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/technofiend/article/details/49908893
个人分类: LINUX PHP MYSQL
上一篇理解正则表达式中的(?R)递归
下一篇重学C语言(一) 字符串数组输出
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭