【问题标题】:PHP Regex throwing error messagesPHP 正则表达式抛出错误消息
【发布时间】:2013-03-29 18:59:49
【问题描述】:

我查看了 PHP 在 PCRE Patterns 上提供的文档。我正在使用第三方插件来处理来自用户的一些文本,并且以下 preg_replace 由于缺少终止 ] 字符而失败。 (preg_replace(): 编译失败:字符类缺少终止]

$input  = preg_replace('/[\]/i','',$userInput);

据我所见,终止分隔符是 / ,其字符类中只有一个 \ 。 i,如果我能正确阅读,告诉表达式不关心大小写。我看到打开 [ 和关闭 ]。

为什么会抛出错误? preg_replace 试图做什么?

【问题讨论】:

  • 要匹配反斜杠使用\\\\ !
  • @Ham: \\\ 就是你想要的。
  • @webbiedave 啊,是的,这也可以:P

标签: php regex preg-replace expression


【解决方案1】:

您需要转义 \ 否则它会转义 ](并且您需要转义两次,一次用于 PHP 字符串,一次用于 PCRE)。

$input  = preg_replace('/[\\\]/i','',$userInput);

您可以完全省略[ 和](以及i)。

$input  = preg_replace('/\\\/','',$userInput);

或者,您可以使用str_replace:

$input  = str_replace('\\','',$userInput);

【讨论】:

  • 所以你告诉我整个事情就是用空格替换 \\ 。我不知道为什么脚本会那样做,但我会重写它。谢谢!
  • 我假设这是一个非常糟糕的 SQL 查询转义尝试,但不知道您使用的是什么库,我只能推测。
  • 通常最好使用四个反斜杠来匹配 PHP 中的反斜杠。虽然它不适用于这种情况,但如果另一个反斜杠字符跟在三个反斜杠后面,则该模式可能不会按预期解释。
猜你喜欢
  • 2023-04-04
  • 2013-05-11
  • 1970-01-01
  • 1970-01-01
  • 2013-06-22
  • 2012-07-19
  • 1970-01-01
  • 1970-01-01
  • 2011-02-02
相关资源
最近更新 更多