dooso0594 2016-09-23 00:37
浏览 126
已采纳

无法使用PHP中的preg_replace正确转义未转义的特殊字符

I'm trying to use preg_replace to escape all special characters in a multi-line string with a backslash, but this string gets passed out and passed back in repeatedly, so to avoid any confusion I wanted to use a regex which only escapes un-escaped special characters (also excluding spaces, newlines, carriage returns and the escape character itself). I.e.,:

$foo \$bar :\:

Should be escaped to become:

\$foo \$bar \:\:

And NOT escaped twice like below:

\$foo \\$bar \:\\:\

I've gotten close with the following:

preg_replace("/([^\\\\])([^a-z0-9\\\\ 
])/i","$1\\\\$2",$input);

But when two of the same special characters appear in sequence, only the first of the two gets escaped.

For example:

....

Becomes:

\..\..

But really I want:

\.\.\.\.

Sorry for the ridiculous issue, or if i'm doing anything stupid! Thanks in advance :)

  • 写回答

1条回答 默认 最新

  • douzi4766 2016-09-23 12:47
    关注

    Try to use negative lookbehind in regex. Like this:

    preg_replace("/(?<!\\\\)([^a-z0-9\\\\ 
    ])/i","\\\\$1",$input)
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 基于卷积神经网络的声纹识别
  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 CSAPPattacklab
  • ¥15 一直显示正在等待HID—ISP
  • ¥15 Python turtle 画图
  • ¥15 stm32开发clion时遇到的编译问题