Heim  >  Artikel  >  Backend-Entwicklung  >  php正则表达式具体的,真头大了。该怎么解决

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

WBOY
WBOYOriginal
2016-06-13 13:23:42874Durchsuche

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>
Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn