php正则表达式具体的,真头大了。。。

netehoney 2011-05-19 05:28:30
提取以下两行数据
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匹配表达式
...全文
143 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
Zjmainstay 2012-07-25
  • 打赏
  • 举报
回复
我的回复怎么不见了???
<?php
$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>".$str;

$str = preg_replace("/(\d{3}) ([a-z]{3}) (.*)\n*/i",'$1,$2,$3'."\n",$str);

echo "<pre>".$str;

//End_php
//输出
123 abc c1 c2 c3
456 def d1 d2 d3
789 ghi z1 z2 z3

123,abc,c1 c2 c3
456,def,d1 d2 d3
789,ghi,z1 z2 z3
Zjmainstay 2012-07-25
  • 打赏
  • 举报
回复
<?php
$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>".$str;

$str = preg_replace("/(\d{3}) ([a-z]{3}) (.*)\n*/i",'$1,$2,$3'."\n",$str);

echo "<pre>".$str;

//End_php

//输出
123 abc c1 c2 c3
456 def d1 d2 d3
789 ghi z1 z2 z3

123,abc,c1 c2 c3
456,def,d1 d2 d3
789,ghi,z1 z2 z3
Zjmainstay 2012-07-25
  • 打赏
  • 举报
回复
[Quote=引用楼主 的回复:]
提取以下两行数据
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匹配表达式
  • [/Quote]
    原数据格式乱七八糟的,明明用空格区分,数据项里面也携带空格。
乌镇程序员 2011-05-19
  • 打赏
  • 举报
回复
snmr_com肯定是被我的思路带到迷宫里去了。。。
乌镇程序员 2011-05-19
  • 打赏
  • 举报
回复
晕。。我只要看到正则就会觉得头大。。
$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>{$str}";

/*
//Output
123 abc c1 c2 c3
456 def d1 d2 d3
789 ghi z1 z2 z3
*/
netehoney 2011-05-19
  • 打赏
  • 举报
回复
呵呵,好,谢谢!
不过你看能再看看能用正则表达就最好了。
$preg="/(.*)\s+(.*)\s+(.*)\n$/i";
我正则写成这样,提出来的乱七八糟,[]先用preg_replace('/\[.*\]/','',$v)来一遍就好了
乌镇程序员 2011-05-19
  • 打赏
  • 举报
回复
$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>{$str}";

/*
//Output
123 abc c1 c2 c3
456 def d1 d2 d3
789 ghi z1 z2 z3
*/
乌镇程序员 2011-05-19
  • 打赏
  • 举报
回复
行多倒不怕,上面代码稍做修改就可以适应不定行数据。
ImN1 2011-05-19
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 netehoney 的回复:]

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

正则做你这个挺复杂的,刚试了两个失败……呵呵,还在想
netehoney 2011-05-19
  • 打赏
  • 举报
回复
不可能不会吧,这个里面就用到了下正则表达式呀
preg_replace('/\[.*\]/','',$v);
因为行数会很多,想有效率而表达简单一点解决!
乌镇程序员 2011-05-19
  • 打赏
  • 举报
回复
正则,不会。。
$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>{$str}";

/*
//Output
123 abc c1 c2 c3
456 def d1 d2 d3
*/
netehoney 2011-05-19
  • 打赏
  • 举报
回复
就是要按空格把一行分成三个部分
ImN1 2011-05-19
  • 打赏
  • 举报
回复
要preg_match_all还是preg_replace?
那些逗号是怎么回事?后面的三个为何又没有逗号?

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧