正则表达式 #号作用

sindel 2010-01-25 03:33:16

echo preg_replace('#[/\\\\]#',"999" , "aad/\\"); // 输出 aad999999
echo preg_replace('[/\\\\]',"999" , "aad/\\"); // 输出 aad999



查资料查不到..请指教
...全文
402 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
mu_rain 2010-04-29
  • 打赏
  • 举报
回复

echo preg_replace('#[/\\\\]#',"999" , "aad/\\"); // 输出 aad999999
echo preg_replace('[/\\\\]',"999" , "aad/\\"); // 输出 aad999

/\\\\ 相当于 /\\
普通的没有定界符的, \w \t \\ 是进行转义。
而有了定界符后,不进行转义。

个人建议,做为一个开发人员,执行一种标准为比较好。 用第二种会好一些。

sindel 2010-04-29
  • 打赏
  • 举报
回复
终于有时间研究并结贴了,很遗憾,LS的大哥回答错误


echo preg_replace('#[/\\\\]#',"999" , "aad/\\"); // 输出 aad999999
echo preg_replace('[/\\\\]',"999" , "aad/\\"); // 输出 aad999


第一个,# 作为定界符, [ ] 表达的意义是 内容的可能值,可能是 / \ ,所以匹配2次,替换成2个999

第二个,也有 定界符 !! 定界符 就是 [] ,此时 [] 的意义不同与上面第一个!! 此时 因为有了定界符, 注意 /\\\\ 中的 \\\\ 先是字符串转义成 \\ ,再是 正则本身的转义,就成了 \ ,结果就是表达成了 /\ 字符串,正则的默认原则是贪婪,所以就把 aad/\ 中的 /\ 替换成了 aad999

所以,得出结论是,研究正则,一定要仔细

LS大哥看了你的回复结果真的是更迷糊,相信自己直觉是正确的
骄傲青蛙 2010-01-25
  • 打赏
  • 举报
回复
有定界符, 里面的/就是一般符号, 没就是转义

第一个匹配两次 /\-->999 \-->999,

第二个没定界符的, /是转义, 只匹配到字符串的一个\ , 所以一个999
sindel 2010-01-25
  • 打赏
  • 举报
回复
同LS的疑问,就是想问界定符到底什么作用,怎么会影响输出结果
codeyell-com 2010-01-25
  • 打赏
  • 举报
回复
为什么两次输出结果不一样?
liuahuilele 2010-01-25
  • 打赏
  • 举报
回复
ok ls的答案很清晰
温馨提示: 结账了!!
jlzan1314 2010-01-25
  • 打赏
  • 举报
回复
preg_replace('#[/\\\\]#',"999" , "aad/\\");
==
preg_replace('|[/\\\\]|',"999" , "aad/\\");
#,| 都可以做界定符,当然想要其他的符号做,也可以...
骄傲青蛙 2010-01-25
  • 打赏
  • 举报
回复
放在一前一后时, 相当于定界符

echo preg_replace('#[/\\\\]#',"999" , "aad/\\"); // 输出 aad999999
echo preg_replace('@[/\\\\]@',"999" , "aad/\\"); // 输出 aad999999

结果一样, 通常用/ , 但文中有了/, 就改其它的@,#

21,886

社区成员

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

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