user187580
user187580

Reputation: 2315

How to convert eregi to preg_match?

I am using a lib which uses

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

but as eregi is deprecated now, i want to convert above to preg_match. I tried it as below

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

but it throws an error saying Unknown modifier '[' in filename.php

any ideas how to resolve this issue?

Thanks

Upvotes: 9

Views: 7326

Answers (3)

codaddict
codaddict

Reputation: 455152

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

Upvotes: 6

Daniel Vandersluis
Daniel Vandersluis

Reputation: 94203

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)

Upvotes: 8

Gumbo
Gumbo

Reputation: 655369

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"

Upvotes: 7

Related Questions