【问题标题】:Escaping regular expressions in PHP在 PHP 中转义正则表达式
【发布时间】:2014-12-04 11:43:12
【问题描述】:

我试图在 PHP 中转义 PCRE 以便在脚本中使用。出于某种原因,当它被转义时我无法让它发挥作用,我只有在 REGEX 作为表单输入时才设法让它工作。

我使用的正则表达式是:

$pattern = '£((http|ftp|https):\/\/)?([\w\-_]+(?:(?:\.[\w\-_]+)+))([\w\-\.,@?^=%&:/~\+#]*[\w\-\@?^=%&/~\+#])?£';

到目前为止我已经尝试过:

preg_quote():将正则表达式转换为以下内容并引发错误:£((http\|ftp\|https):\/\/)\?([\w\-_]+(\? :(\?:\.[\w\-_]+)+))([\w\-\.,@\?\^\=%&:/~\+#]*[\w\- \@\?\^\=%&/~\+#])\?£

htmlentities(): 给出错误: 警告: preg_match(): Unknown modifier 'a'

addslashes():同上

三者的混合:同上

有人知道我做错了什么吗?

【问题讨论】:

  • 似乎您从其他地方复制粘贴正则表达式,并在复制时复制隐藏的垃圾字符,而不是“磅”符号,使用其他内容或使用键盘重新输入来解决问题
  • 解决了!看起来英镑符号是问题所在,谢谢。我在考虑使用分隔符时遇到了一些麻烦,因为正则表达式使用了很多符号。
  • 我更喜欢使用 / 或 !如下例所示。

标签: php regex escaping pcre


【解决方案1】:

英镑符号是这里的问题,将其替换为感叹号解决了问题。 工作表达式:

$pattern = '!((http|ftp|https):\/\/)?([\w\-_]+(?:(?:\.[\w\-_]+)+))([\w\-\.,@?^=%&:/~\+#]*[\w\-\@?^=%&/~\+#])?!';

由于某种原因,这在没有转义函数的情况下可以正常工作。

【讨论】:

    猜你喜欢
    • 2021-06-04
    • 1970-01-01
    • 2013-01-18
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-02
    相关资源
    最近更新 更多