How to convert eregi to preg_match?

前端 未结 3 474
花落未央
花落未央 2021-01-05 04:26

I am using a lib which uses

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

but as eregi is deprecat

相关标签:
3条回答
  • 2021-01-05 04:49

    You need to escape the delimiters inside the regular expression (in this case the /):

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

    But you could also chose a different delimiter like ~:

    "~^http/[0-9]+\\.[0-9]+[ \t]+([0-9]+)[ \t]*(.*)\$~i"
    
    0 讨论(0)
  • 2021-01-05 04:53

    If you use / as the regex delimiter (ie. preg_match('/.../i', ...)), you need to escape any instances of / in your pattern or php will think it's referring to the end of the pattern.

    You can also use a different character such as % as your delimiter:

    preg_match('%^http/[0-9]+\.[0-9]+[ \t]+([0-9]+)[ \t]*(.*)$%i',$line,$matches)
    
    0 讨论(0)
  • 2021-01-05 05:06

    You can try:

    preg_match("@^http/[0-9]+\\.[0-9]+[ \t]+([0-9]+)[ \t]*(.*)\$@i",$line,$matches)
    
    • You can drop the the $match=
    • You are using / as the delimiter and there is another / present in the regex after http, which effectively marks the end of your regex. When PHP sees the [ after this it complains.
    • You can use a different set of delimiters as @ or escape the / after http
    0 讨论(0)
提交回复
热议问题