遇到一个比较棘手的正则表达式问题

boyuan 2009-08-07 11:42:57
我遇到一个比较棘手的难题。
有这样一种字符串: "abcd ef #[gh i]# jkl #[m n]#op q"
也就是说,这个字符串中有空格,还有用#[ ]#包围起来的子串,子串里面也可能有空格。
现在的要求是,要用正则表达式替换子串外面部分里的空格为  而#[ ]#子串里面如果有空格,不替换。
好难啊,这个应该怎么写呢??
...全文
32 点赞 收藏 2
写回复
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
boyuan 2009-08-09
这你也能写出来,服了你!
回复
薄荷脑 2009-08-08
$str = 'abcd  ef #[g h i ]# jkl #[ m n]#op q';

//该方法适合#[ ]#中只有一个空格的情形,如果是#[g h i]#则会被替换成#[g h i]#
echo preg_replace("/ (?!\w*\]#)/", ' ', $str);

//该方法适合所有情形
$arr = preg_split("/(#\[.*?\]#)/", $str, -1, PREG_SPLIT_DELIM_CAPTURE);
$output = '';
for ($i = 0, $j = count($arr); $i < $j; ++$i) {
if ($i % 2 == 0) $output .= str_replace(' ', ' ', $arr[$i]);
else $output .= $arr[$i];
}
echo $output;
回复
发动态
发帖子
基础编程
创建于2007-09-28

2.1w+

社区成员

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