Php regex中的订单重要吗?

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)表示-在此处指示无效范围 : 减号(连字符)字符可用于指定 字符类中的字符。

特别是关于这里的PHP preg_split,为什么这是有效的:

$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);