Php regex中的订单重要吗?
特别是关于这里的PHP preg_split,为什么这是有效的:Php regex中的订单重要吗?,php,regex,Php,Regex,特别是关于这里的PHP preg_split,为什么这是有效的: $words = preg_split("/[\/\s,_-]+/", $string); 其中,下面返回“preg_split()[function.preg split]:编译失败:偏移量7处字符类中的范围无序”: 注意唯一的区别是正则表达式中正斜杠的位置。问题在于$words=preg\u split(“/[\s,\-\/]+/”,$string)表示-在此处指示无效范围 : 减号(连字符)字符可用于指定 字符类中的字符。
$words = preg_split("/[\/\s,_-]+/", $string);
其中,下面返回“preg_split()[function.preg split]:编译失败:偏移量7处字符类中的范围无序”:
注意唯一的区别是正则表达式中正斜杠的位置。问题在于
$words=preg\u split(“/[\s,\-\/]+/”,$string)代码>表示-
在此处指示无效范围
:
减号(连字符)字符可用于指定
字符类中的字符。例如,[d-m]匹配任何字母
在d和m之间,包括在内。如果在
类,它必须用反斜杠转义或显示在某个位置
不能将其解释为指示范围,通常为
类中的第一个或最后一个字符
如果范围有效,即从索引较低的字符开始到索引较高的字符,则不会出现编译错误。但是,此处的范围无效,因为\uuu
的十进制代码点为95
,而/
的十进制代码点为47
尝试[\[\s,\/-\u\]+][2]
,您将看到它捕获您不希望匹配的内容
这就是为什么您应该在character类中转义连字符,或者将其放在其开始的末尾。这些是相等的正确正则表达式:[\/\s、[u-]+
、[-\/\s、[u]+
和[\/\-\s、[u]+
char类中心的unescaped-
就像一个范围量词。由于\uuu
和/
之间没有范围,因此它会像上面那样显示错误。啊!谢谢阿维纳什
$words = preg_split("/[\s,_-\/]+/", $string);