具体关于PHP preg_split,为什么这有效:
$words = preg_split("/[\/\s,_-]+/", $string);
以下返回" preg_split()[function.preg-split]:编译失败:偏移量为7"的字符类中的范围乱序:
$words = preg_split("/[\s,_-\/]+/", $string);
请注意唯一的区别是正则表达式在正则表达式中的位置。
答案 0 :(得分:1)
$words = preg_split("/[\s,_-\/]+/", $string);
的问题是-
表示此处的范围无效。
减号(连字符)字符可用于指定范围 字符类中的字符。例如,[d-m]匹配任何字母 在d和m之间,包括在内。如果a中需要减号 类,它必须使用反斜杠转义或出现在某个位置 它不能被解释为指示范围,通常为 班上的第一个或最后一个角色。
如果范围有效,则不会出现编译错误,即从索引较低的字符到索引较高的字符开始。但是,此处,范围无效,因为_
的十进制代码点为95
,而/
' s为47
。
尝试[\[\s,\/-_\]+][2]
,您会看到它捕捉到您不希望匹配的内容。
这就是为什么你应该在字符类中转义连字符,或者将它放在开头的末尾。这些是正确的正确的正则表达式:[\/\s,_-]+
,[-\/\s,_]+
和[\/\-\s,_]+
。