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

boyuan 2009-08-07 11:42:57
我遇到一个比较棘手的难题。
有这样一种字符串: "abcd ef #[gh i]# jkl #[m n]#op q"
也就是说,这个字符串中有空格,还有用#[ ]#包围起来的子串,子串里面也可能有空格。
现在的要求是,要用正则表达式替换子串外面部分里的空格为  而#[ ]#子串里面如果有空格,不替换。
好难啊,这个应该怎么写呢??
...全文
63 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
boyuan 2009-08-09
  • 打赏
  • 举报
回复
这你也能写出来,服了你!
张吉Jerry 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;

21,893

社区成员

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

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