【问题标题】:PHP: escape non-alphanumeric charactersPHP:转义非字母数字字符
【发布时间】:2011-09-09 05:32:29
【问题描述】:

我正在尝试将我之前在 bash 中编写的脚本移植到 PHP 中。一个特定的行是关于转义所有非字母数字字符。

在 bash 中,我能够将其作为单行执行,如下所示:

echo "aaa bbb::" | sed 's/\([^a-zA-Z0-9]\)/\\\1/g'
# => aaa\ bbb\:\:

我在 PHP 中最接近的是:

echo preg_replace('/([^a-zA-Z0-9])/','\\\','aaa bbb::');
# => aaa\bbb\\

但是我很难在 preg_replace 中重用我的正则表达式组(我尝试了 \1 和 $1)。

有人可以帮我搞定这个 PHP 单线器吗?

【问题讨论】:

  • 可能是个愚蠢的问题,但为什么你需要转义所有非字母字符?
  • 因为我正在为mod_rewrite 生成过滤器,但它并不喜欢它们。

标签: php regex escaping alphanumeric


【解决方案1】:
echo preg_replace('/([^a-zA-Z0-9])/',"\\\\$1",'aaa bbb::');
//output => aaa\ bbb\:\:

【讨论】:

    【解决方案2】:

    使用[^[:alnum:]] 表示您的语言环境中的所有非字母数字字符,不要忘记对反斜杠进行双重转义:

    $ cat test.php
    #!/usr/bin/env php
    
    <?
    echo preg_replace('/([^[:alnum:]])/', '\\\\$1', 'aaa bbb::');
    ?>
    
    $ ./test.php 
    aaa\ bbb\:\:
    

    【讨论】:

    • +1 建议 [^[:alnum:]] and 使用单引号! :P
    【解决方案3】:

    试试:

    echo preg_replace('~([^a-zA-Z0-9])~', '\\\\$1', 'aaa bbb::');
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-09-15
      • 1970-01-01
      • 1970-01-01
      • 2014-09-26
      • 1970-01-01
      • 2011-09-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多