在PHP中转义正则表达式

时间:2014-12-04 11:43:13

标签: php regex escaping pcre

我试图逃避PHP中的PCRE以用于脚本。出于某种原因,我无法在转义时使其正常运行,我只是设法在REGEX作为表单输入提供时才能正常工作。

我正在使用的正则表达式是:

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

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

preg_quote():将正则表达式转换为以下内容并抛出错误:£((http \ | ftp \ | https):\ / \ /)\?([\ w \ -_] +(\? :(?:\:\ [\ W \ -_] +。)+))([\ W \ - \,@ \ \ ^ \ =%&安培;:/?〜\ +#] * [\ W \ ? - \ @ \ \ ^ \ =%&安培; /〜\ +#])\ A£

htmlentities():给出错误:警告:preg_match():未知修饰符'a'

addslashes():与上面相同

3的混合物:与上述相同

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

1 个答案:

答案 0 :(得分:0)

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

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

出于某种原因,这种方法很好,没有转义函数。