Preg_replace 范围字符 class
Preg_replace range character class
它是这样说的,我想知道为什么会这样。以前没有过。
警告:preg_replace():编译失败:第 158 行 messenger.php 中偏移量 16 处字符 class 的无效范围
$pattern = array(
"/[^@\s]*@[^@\s]*\.[^@\s]*/",
"/[a-zA-Z]*[:\/\/]*[A-Za-z0-9\-_]+\.+[A-Za-z0-9\.\/%&=\?\-_]+/i",
'/\+?[0-9][0-9()-\s+]{4,20}[0-9]/'
);
$replacement = array(
"[removed email]",
"[removed url]",
"[removed phone]"
);
$message_text = preg_replace($pattern, $replacement, $message_text);
第 158 行是最后一个 $message_text.
谁能帮忙?
在 \+?[0-9][0-9()-\s+]{4,20}[0-9]
中,您放错了连字符,正则表达式引擎认为您试图在 )
和 \s
之间建立一个范围。
shorthand class不可能出现在范围边界。
这是 Debuggex.com 中出现的错误:
这里是 PCRE Reference 的摘录:
An error is generated if a POSIX character class (see below) or an
escape sequence other than one that defines a single character appears
at a point where a range ending character is expected. For example,
[z-\xff]
is valid, but [A-\d]
and [A-[:digit:]]
are not.
使用 \+?[0-9][0-9()\s+-]{4,20}[0-9]
,或像 \+?[0-9][0-9()\-\s+]{4,20}[0-9]
.
这样的连字符转义
您忘记转义破折号了:
'/\+?[0-9][0-9()-\s+]{4,20}[0-9]/'
// here __^
应该是:
'/\+?[0-9][0-9()\-\s+]{4,20}[0-9]/'
它是这样说的,我想知道为什么会这样。以前没有过。
警告:preg_replace():编译失败:第 158 行 messenger.php 中偏移量 16 处字符 class 的无效范围
$pattern = array(
"/[^@\s]*@[^@\s]*\.[^@\s]*/",
"/[a-zA-Z]*[:\/\/]*[A-Za-z0-9\-_]+\.+[A-Za-z0-9\.\/%&=\?\-_]+/i",
'/\+?[0-9][0-9()-\s+]{4,20}[0-9]/'
);
$replacement = array(
"[removed email]",
"[removed url]",
"[removed phone]"
);
$message_text = preg_replace($pattern, $replacement, $message_text);
第 158 行是最后一个 $message_text.
谁能帮忙?
在 \+?[0-9][0-9()-\s+]{4,20}[0-9]
中,您放错了连字符,正则表达式引擎认为您试图在 )
和 \s
之间建立一个范围。
shorthand class不可能出现在范围边界。
这是 Debuggex.com 中出现的错误:
这里是 PCRE Reference 的摘录:
An error is generated if a POSIX character class (see below) or an escape sequence other than one that defines a single character appears at a point where a range ending character is expected. For example,
[z-\xff]
is valid, but[A-\d]
and[A-[:digit:]]
are not.
使用 \+?[0-9][0-9()\s+-]{4,20}[0-9]
,或像 \+?[0-9][0-9()\-\s+]{4,20}[0-9]
.
您忘记转义破折号了:
'/\+?[0-9][0-9()-\s+]{4,20}[0-9]/'
// here __^
应该是:
'/\+?[0-9][0-9()\-\s+]{4,20}[0-9]/'