[英]Preg_replace range character class
這是在說,我想知道為什么會這樣。 以前沒有發生過。
警告:preg_replace():編譯失敗:在158行的messenger.php中,偏移量為16的字符類的范圍無效
$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
之間建立范圍\\s
。
速記類別不可能出現在范圍邊界。
這是在Debuggex.com中出現的錯誤:
這是PCRE參考的摘錄:
如果POSIX字符類(請參閱下文)或除定義單個字符的轉義序列以外的其他轉義序列出現在期望范圍終止字符的位置,則會生成錯誤。 例如,
[z-\\xff]
有效,但是[A-\\d]
和[A-[:digit:]]
無效。
使用\\+?[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]/'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.