【问题标题】:How to convert eregi to preg_match?如何将eregi 转换为preg_match?
【发布时间】:2010-03-23 16:02:07
【问题描述】:

我正在使用一个使用

的库
eregi($match="^http/[0-9]+\\.[0-9]+[ \t]+([0-9]+)[ \t]*(.*)\$",$line,$matches)

但由于现在不推荐使用eregi,我想将上面的转换为preg_match。我试了如下

preg_match($match="/^http/[0-9]+\\.[0-9]+[ \t]+([0-9]+)[ \t]*(.*)\$/i",$line,$matches)

但它会抛出一个错误说Unknown modifier '[' in filename.php

任何想法如何解决这个问题?

谢谢

【问题讨论】:

标签: php regex


【解决方案1】:

如果您使用/ 作为正则表达式分隔符(即preg_match('/.../i', ...)),您需要转义模式中/ 的任何实例,否则php 会认为它指的是模式的结尾。

您也可以使用不同的字符,例如 % 作为分隔符:

preg_match('%^http/[0-9]+\.[0-9]+[ \t]+([0-9]+)[ \t]*(.*)$%i',$line,$matches)

【讨论】:

  • +1 为/ 解释。是的,当 PHP 在您的正则表达式中找到任何 / 时,它将视为正则表达式的结尾。
【解决方案2】:

您需要转义正则表达式中的delimiters(在本例中为/):

"/^http\\/[0-9]+\\.[0-9]+[ \t]+([0-9]+)[ \t]*(.*)\$/i"

但您也可以选择不同的分隔符,例如 ~

"~^http/[0-9]+\\.[0-9]+[ \t]+([0-9]+)[ \t]*(.*)\$~i"

【讨论】:

    【解决方案3】:

    你可以试试:

    preg_match("@^http/[0-9]+\\.[0-9]+[ \t]+([0-9]+)[ \t]*(.*)\$@i",$line,$matches)
    
    • 您可以删除$match=
    • 您正在使用/ 作为分隔符 还有另一个/存在于 http 之后的正则表达式,这实际上是 标志着你的正则表达式的结束。当 PHP 在此之后看到[ 它抱怨。
    • 您可以使用一组不同的 分隔符为@ 或在http 之后转义/

    【讨论】:

      猜你喜欢
      • 2011-02-09
      • 2013-02-10
      • 2014-12-07
      • 2011-07-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-25
      相关资源
      最近更新 更多