【问题标题】:php preg_split error when switching from split to preg_split从 split 切换到 preg_split 时出现 php preg_split 错误
【发布时间】:2011-01-18 07:02:47
【问题描述】:
在从 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);
如何修复正则表达式使其不再使用 \
谢谢!
【问题讨论】:
标签:
php
regex
split
preg-split
【解决方案1】:
错误是因为您的正则表达式需要一个分隔符。
$statements = preg_split("/\s*;\s*/", $content);
【解决方案2】:
虽然问题在被问两分钟后被标记为已回答,但我想为记录添加一些信息。
与字符串由引号分隔的方式类似,许多语言(如 Perl 或 JavaScript)中的正则表达式由正斜杠分隔。这将导致表达式如下所示:
/\s*;\s*/
此语法还允许指定修饰符:
/\s*;\s*/Ui
PHP 的 Perl 兼容正则表达式(又名 preg_... 函数)继承了这一点。但是,PHP 本身不支持这种语法,因此使用 /\s*;\s*/ 提供 preg_split() 会引发解析错误。相反,您用引号将其括起来以构建常规字符串。
您必须考虑的另一件事是 PHP 允许更改分隔符。例如,您可以这样使用:
@\s*;\s*@Ui
它有什么用?它简化了正斜杠 inside 表达式的使用,因为您不需要转义它们。比较:
/^\/home\/.*$/i
@^/home/.*$@i
【解决方案3】:
如果你不喜欢分隔符,可以使用T-Regx tool:
pattern("\\s*;\\s*")->split($content):
你也可以使用Pattern::of("\\s*;\\s*")->split()