• 技术文章 >后端开发 >php教程

    php正则表达式具体的,真头大了。该怎么解决

    2016-06-13 13:23:42原创444
    php正则表达式具体的,真头大了。。。
    提取以下两行数据
    123[test] abc c1 c2 c3
    456 def d1[test] d2 d3
    以换行和空格为分割
    要求提取到
    123,abc,c1 c2 c3
    456,def,d1 d2 d3
    数据中间可能还有[*]要忽略
    求preg_match_all匹配表达式

    ------解决方案--------------------
    要preg_match_all还是preg_replace?
    那些逗号是怎么回事?后面的三个为何又没有逗号?
    ------解决方案--------------------
    正则,不会。。
    PHP code
    $str = '123[test] abc c1 c2 c3
    456 def d1[test] d2 d3';
    
    $ar = split("[\n\r]+",$str);
    
    $ar1 = explode(' ',$ar[0]);
    $ar2 = explode(' ',$ar[1]);
    
    function fmt($ar) {
       foreach($ar as $k => $v) $ar[$k] = preg_replace('/\[.*\]/','',$v);
       return $ar;
    }
    $ar1 = fmt($ar1);
    $ar2 = fmt($ar2);
    
    $str = implode(' ',$ar1)."\n".implode(' ',$ar2);
    
    echo "
    {$str}";
    
    /*
    //Output
    123 abc c1 c2 c3
    456 def d1 d2 d3
    */
    
    ------解决方案--------------------
    探讨

    不可能不会吧,这个里面就用到了下正则表达式呀
    preg_replace('/\[.*\]/','',$v);
    因为行数会很多,想有效率而表达简单一点解决!

    ------解决方案--------------------
    行多倒不怕,上面代码稍做修改就可以适应不定行数据。
    ------解决方案--------------------
    PHP code
    $str = 
    '123[test] abc c1 c2 c3
    456 def d1[test] d2 d3
    789 ghi[sfjsldf] z1 z2 z3';
    
    $ar = split("[\n\r]+",$str);
    
    $arTMP = array();
    foreach($ar as $v) $arTMP[] = explode(' ',$v);
    
    function fmt($ar) {
       foreach($ar as $k => $v) $ar[$k] = preg_replace('/\[.*\]/','',$v);
       return $ar;
    }
    foreach($arTMP as $k => $v) $arTMP[$k] = implode(' ',fmt($v));
    
    $str = implode("\n",$arTMP);
    
    echo "
    {$str}";
    
    /*
    //Output
    123 abc c1 c2 c3
    456 def d1 d2 d3
    789 ghi z1 z2 z3
    */
    
    ------解决方案--------------------
    晕。。我只要看到正则就会觉得头大。。
    PHP code
    $str = 
    '123[test] abc c1 c2 c3
    456 def d1[test] d2 d3
    789 ghi[sfjsldf] z1 z2 z3';
    
    $str = preg_replace('/\[.*\]/','',$str);
    
    echo "
    {$str}";
    
    /*
    //Output
    123 abc c1 c2 c3
    456 def d1 d2 d3
    789 ghi z1 z2 z3
    */ 
    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:quot ar str test replace
    20期PHP线上班

    相关文章推荐

    精选22门好课,价值3725元,开通VIP免费学习!• PHP实现LRU算法的示例代码• 怎样利用Dockerfile文件部署PHP项目• 什么是接口?如何在PHP中使用接口编写优雅的代码?• php7.2怎么连接oracle数据库?OCI8扩展的安装• php将csv文件导入到mysql数据库的方法,_PHP教程
    1/1

    PHP中文网