在从 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);
如何修复正则表达式不再使用\
谢谢!
在从 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);
如何修复正则表达式不再使用\
谢谢!
该错误是因为您需要在正则表达式周围使用分隔符。
$statements = preg_split("/\s*;\s*/", $content);
尽管该问题在被问两分钟后被标记为已回答,但我想为记录添加一些信息。
与字符串由引号分隔的方式类似,许多语言(例如 Perl 或 JavaScript)中的正则表达式由正斜杠分隔。这将导致表达式如下所示:
/\s*;\s*/
此语法还允许指定修饰符:
/\s*;\s*/Ui
PHP 的 Perl 兼容正则表达式(又名 preg_... 函数)继承了这一点。但是,PHP 本身不支持这种语法,因此使用 preg_split()/\s*;\s*/
会引发解析错误。相反,您用引号将其括起来以构建常规字符串。
您必须考虑的另一件事是 PHP 允许更改分隔符。例如,你可以使用这个:
@\s*;\s*@Ui
到底有什么好处呢?它简化了表达式中正斜杠的使用,因为您不需要转义它们。相比:
/^\/home\/.*$/i
@^/home/.*$@i
如果您不喜欢分隔符,可以使用T-Regx 工具:
pattern("\\s*;\\s*")->split($content):
你也可以使用Pattern::of("\\s*;\\s*")->split()