从split切换到preg_split时出现php preg_split错误

时间:2010-02-18 11:27:20

标签: php regex split preg-split

在从split拆分到preg_split for php 5.3兼容性之后,我从php得到了这个警告:

PHP Warning:  preg_split(): Delimiter must not be alphanumeric or backslash

php代码是:

$statements = preg_split("\\s*;\\s*", $content);

如何将正则表达式修复为不再使用\

谢谢!

3 个答案:

答案 0 :(得分:10)

错误是因为你需要在正则表达式周围加上分隔符。

$statements = preg_split("/\s*;\s*/", $content);

答案 1 :(得分:4)

虽然问题在被问到两分钟后被标记为已回答,但我想为记录添加一些信息。

与字符串用引号分隔的方式类似,许多语言中的正则表达式(如Perl或JavaScript)由正斜杠分隔。这将导致表达式如下:

/\s*;\s*/

此语法还允许指定修饰符:

/\s*;\s*/Ui

PHP的Perl兼容正则表达式(又名preg _...函数)继承了这一点。但是,PHP本身不支持此语法,因此使用/\s*;\s*/加载preg_split()会引发解析错误。相反,您可以用引号将其括起来构建常规字符串。

您必须考虑的另一件事是PHP允许更改分隔符。例如,您可以使用:

@\s*;\s*@Ui

有什么好处?它简化了表达式 in 表达式的使用,因为你不需要转义它们。比较:

/^\/home\/.*$/i
@^/home/.*$@i

答案 2 :(得分:0)

如果您不喜欢分隔符,则可以使用T-Regx tool

pattern("\\s*;\\s*")->split($content):

您也可以使用Pattern::of("\\s*;\\s*")->split()