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

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

WBOY
WBOYOriginal
2016-06-13 13:23:42825browse

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 "<pre class="brush:php;toolbar:false">{$str}";

/*
//Output
123 abc c1 c2 c3
456 def d1 d2 d3
*/
<br><font color="#e78608">------解决方案--------------------</font><br>
探讨

不可能不会吧,这个里面就用到了下正则表达式呀
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 "<pre class="brush:php;toolbar:false">{$str}";

/*
//Output
123 abc c1 c2 c3
456 def d1 d2 d3
789 ghi z1 z2 z3
*/
<br><font color="#e78608">------解决方案--------------------</font><br>晕。。我只要看到正则就会觉得头大。。<br>
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 "<pre class="brush:php;toolbar:false">{$str}";

/*
//Output
123 abc c1 c2 c3
456 def d1 d2 d3
789 ghi z1 z2 z3
*/ <div class="clear">
                 
              
              
        
            </div>
Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn