这样的值怎么提取

beijing_girl 2006-06-02 04:44:11
文本文件中都是这样的记录,下边是其中两行:

subtime[2006-06-01 00:00:26] serviceid[03201062] agent[] company[]
subtime[2006-06-01 00:00:23] serviceid[03202766] agent[SAMSUNG-SGH-E108/ UP.Browser/6.1.0.6 (GUI) MMP/1.0] company[3]


怎么取到这样的值:
第一个值:subtime[2006-06-01 00:00:23]
第二个值:serviceid[03202766]
第三个值:agent[SAMSUNG-SGH-E108/ UP.Browser/6.1.0.6 (GUI) MMP/1.0]
第四个值:company[3]
...全文
107 8 打赏 收藏 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
indexroot 2006-06-02
  • 打赏
  • 举报
回复
要取里面的数据这样就行了

<?php
$s="subtime[2006-06-01 00:00:26] serviceid[03201062] agent[]
company[]
subtime[2006-06-01
00:00:23] serviceid[03202766]
agent[SAMSUNG-SGH-E108/ UP.Browser/6.1.0.6 (GUI) MMP/1.0] company[3]";

preg_match_all("/
\w+
\[
([^\]]+?)
\]
/x", $s, $r);

print_r($r[1]);
?>
beijing_girl 2006-06-02
  • 打赏
  • 举报
回复
正确啦,原来explode()和split()是有区别的
beijing_girl 2006-06-02
  • 打赏
  • 举报
回复
要提取subtime[2006-06-01 00:00:23] 里的“2006-06-01 00:00:23”,我下面的代码哪儿不正确呢,提示错误:
split(): REG_EBRACK in /logphp/log.php on line 10


$log=file("../logphp/lenovo.log");

while(list(,$value)=each($log))
{

preg_match_all("/\w+\[.*?\]/s", $value, $vars);

if(count(explode("[",$vars[0][0]))>1){

$varsaction=split("[",$vars[0][0]);
$logarr[0] = $varsaction[1];

}

}
indexroot 2006-06-02
  • 打赏
  • 举报
回复
上面的可以去掉模式修正符s
preg_match_all("/\w+\[[^\]]+?\]/", $s, $r);
indexroot 2006-06-02
  • 打赏
  • 举报
回复
<?php
$s="subtime[2006-06-01 00:00:26] serviceid[03201062] agent[] company[]
subtime[2006-06-01 00:00:23] serviceid[03202766] agent[SAMSUNG-SGH-E108/ UP.Browser/6.1.0.6 (GUI) MMP/1.0] company[3]";
preg_match_all("/\w+\[[^\]]+?\]/s", $s, $r);
print_r($r);
?>
xuzuning 2006-06-02
  • 打赏
  • 举报
回复
preg_match_all("/\w+\[.+?\]/s", $s, $r);
print_r($r);
beijing_girl 2006-06-02
  • 打赏
  • 举报
回复
这个怎么用呀,能具体些吗,我不懂正则
iasky 2006-06-02
  • 打赏
  • 举报
回复
正则

"|(subtime\[.*?\])|"

21,889

社区成员

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

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