【问题标题】: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()

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2023-03-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-12-01
          • 2011-01-28
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多