preg_match导致错误“分隔符不能是字母数字或反斜杠”

时间:2014-08-26 22:22:52

标签: php regex wordpress preg-match

在我的WordPress网站上,我检查了一些用户输入。为此,我使用了两个正则表达式。

相关的行是

preg_match($telephone,'/\(?([0-9]{2,5})\)?([ .-]?)([0-9]{2,5})\2([0-9]{2,5})/')

preg_match($website,'/(((http|ftp|https):\/{2})?+(([0-9a-z_-]+\.)+(it|com|org)(:[0-9]+)?((\/([~0-9a-zA-Z\#\+\%@\.\/_-]+))?(\?[0-9a-zA-Z\+\%@\/&\[\];=_-]+)?)?))\b/imuS')

在这两行中我收到以下错误:

  

警告:preg_match()[function.preg-match]:分隔符不能是字母数字或反斜杠。

我很陌生,因为我知道反斜杠可以是分隔符,我从网络的各个角落都得到了确认。

我按照this question中的说明更改了起始和结束反斜杠。

preg_match($telephone,'#\(?([0-9]{2,5})\)?([ .-]?)([0-9]{2,5})\2([0-9]{2,5})#')

preg_match($website,'#(((http|ftp|https):\/{2})?+(([0-9a-z_-]+\.)+(it|com|org)(:[0-9]+)?((\/([~0-9a-zA-Z\#\+\%@\.\/_-]+))?(\?[0-9a-zA-Z\+\%@\/&\[\];=_-]+)?)?))\b#imuS')

但是我不断得到相同的错误,即使反斜杠不再使用分隔符。

我做错了什么?

2 个答案:

答案 0 :(得分:3)

你的语法不正确,翻转你的正则表达式和输入字符串。

documentation ..

中说明了这一点
preg_match($pattern, $string);

答案 1 :(得分:1)

preg_match syntax中,正则表达式模式是第一个参数,与之匹配的字符串是第二个,而不是相反。

因此你应该使用

preg_match('#(((https?|ftp)://)?+(([0-9a-z_-]+\.)+(it|com|org)(:[0-9]+)?((/([~0-9a-zA-Z\#+%@./_-]+))?(\?[0-9a-zA-Z+%@/&[\];=_-]+)?)?))\b#imuS', $website)

preg_match('/\(?([0-9]{2,5})\)?([ .-]?)([0-9]{2,5})\2([0-9]{2,5})/', $telephone)