php对特殊格式文件的操作

zhusnow 2010-08-10 10:34:53
例:
src user {
ip 192.168.1.30
}

time testTime {
weekly smw
}
acl {
user within TestTime {
pass !movies !politics !news !video !forum any
}else {
pass any
}
}
如何写入到acl{ 里面,且读取出user,TestTime,及movies ,politics 等
...全文
68 点赞 收藏 9
写回复
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
xuzuning 2010-08-12
$s = " user within TestTime {
";
$p = "/^\s*\w+\s+within\s+\w+/i";

echo preg_match($p, $s, $r) ? 'yes' : 'no';


从文件读取内容也要写吗?
回复
zhusnow 2010-08-12
帮忙写一个只匹配string winthin string的正则表达式,
src user {
ip 192.168.1.30
}

time testTime {
weekly smw
}
acl {
user within TestTime {
pass !movies !politics !news !video !forum any
}else {
pass any
}
}
是从一个文件中读取的,是一行行的数组
回复
helloyou0 2010-08-11
读出来用正则等一步步分析啊,
别人没法说什么详细的,因为不知道你这个文件里的含义和约定.

不知道你遇到的困难在哪里?
回复
zhusnow 2010-08-11
我想读取把
user within TestTime {
pass !movies !politics !news !video !forum any
}else {
pass any
} 类型的数据一次写入到acl{}里面,我用正则表达式可以脱去外面的一层acl{},但匹配不了user within TestTime
回复
xuzuning 2010-08-11
$s = <<< TEXT
src user {
ip 192.168.1.30
}

time testTime {
weekly smw
}
acl {
user within TestTime {
pass !movies !politics !news !video !forum any
}else {
pass any
}
}
TEXT;

function foo($s) {
preg_match('/acl\s+{(.+)}/is', $s, $p); //提取 acl 中的内容
preg_match('/(.+within TestTime {.+}.+})/isU', $p[1], $r); //提取第一节
$s = str_replace($p[1], $p[1].$r[1], $s);
return $s;
}
//执行一次
echo $s = foo($s);
//再执行一次,看看效果是你要的吗?
echo $s = foo($s);

回复
zhusnow 2010-08-11
谁能帮忙写正则表达式与foo-clients within workhours ,缩进一个Tab
acl {
admin {
pass any
}
foo-clients within workhours {
pass !adv !aggressive !alcohol !automobile_bikes any
} else {
pass any
}
}
回复
zhusnow 2010-08-11
src user {
ip 192.168.1.30
}

time testTime {
weekly smw
}
acl {
user within TestTime {
pass !movies !politics !news !video !forum any
}else {
pass any
}
name within TestTime {
pass !movies !politics !news !video !forum any
}else {
pass any
}
uname within TestTime {
pass !movies !politics !news !video !forum any
}else {
pass any
}
}
每保存一次
都把 uname within TestTime {
pass !movies !politics !news !video !forum any
}else {
pass any
} 写入到acl{}内
回复
xuzuning 2010-08-11
这样说吧,把用你的例子想要得到的结果贴出来
回复
CunningBoy 2010-08-10
可以考虑用正则,但是挺复杂的。
这样的文件结构,你没有考虑在输出的时候时候用xml代替?
回复
发动态
发帖子
基础编程
创建于2007-09-28

2.1w+

社区成员

从PHP安装配置,PHP入门,PHP基础到PHP应用
申请成为版主
社区公告
暂无公告