5

在从 split 更改为 preg_split 以实现 php 5.3 兼容性后,我从 php 收到此警告:

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

php代码是:

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

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

谢谢!

4

3 回答 3

10

该错误是因为您需要在正则表达式周围使用分隔符。

$statements = preg_split("/\s*;\s*/", $content);
于 2010-02-18T11:29:15.740 回答
4

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

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

/\s*;\s*/

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

/\s*;\s*/Ui

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

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

@\s*;\s*@Ui

到底有什么好处呢?它简化了表达式中正斜杠的使用,因为您不需要转义它们。相比:

/^\/home\/.*$/i
@^/home/.*$@i
于 2010-02-18T11:49:59.503 回答
0

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

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

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

于 2019-01-29T12:31:37.460 回答