10

I'm getting the following message for some php I have to use but did not write:

Deprecated: Function ereg() is deprecated in /opt/lampp/htdocs/webEchange/SiteWeb_V5/inc/html2fpdf.php on line 466

This is line 466:

if(ereg('^([^=]*)=["\']?([^"\']*)["\']?$',$v,$a3))

I tried simply replacing with preg_match, but it couldn't recognize the = modifier in the regular expression.. I'm not too good with regular expression yet and solving this requires that I learn the regexp ereg needs AND the regexp preg_match needs (which, if I am not mistaken, is different)... Could you guys help me out with this one?

Thanks

Gumbo
  • 620,600
  • 104
  • 758
  • 828
Shawn
  • 10,280
  • 18
  • 74
  • 123
  • Possible duplicate of [How can I convert ereg expressions to preg in PHP?](https://stackoverflow.com/questions/6270004/how-can-i-convert-ereg-expressions-to-preg-in-php) – Meloman Sep 14 '17 at 12:44

3 Answers3

6

POSIX extended regular expressions (POSIX ERE, used by ereg) and Perl-combatible regular expressions (PCRE, used by preg_match) are very similar. Except from some special POSIX expressions, PCRE is a superset of POSIX ERE.

That means you just need to put your POSIX ERE regular expressions into delimiters (here /) and escape any occurrence of that character inside the regular expression and you have a valid PCRE regular expression:

/^([^=]*)=["']?([^"']*)["']?$/

So:

preg_match('/^([^=]*)=["\']?([^"\']*)["\']?$/', $v, $a3)
Gumbo
  • 620,600
  • 104
  • 758
  • 828
  • Not really a superset (besides character classes), e.g. matching `/AB|ABC/` on `ABCD` with ERE will give the longest match (`ABC`) but PCRE will give the first match (`AB`). – kennytm Feb 07 '10 at 19:12
2

Try:

if(preg_match('~^([^=]*)=["\']?([^"\']*)["\']?$~',$v,$a3))

The regex in preg_match needs to be enclosed between a pair of delimiters, which is not the case with the deprecated ereg() function.

codaddict
  • 429,241
  • 80
  • 483
  • 523
0

the preg_ family expects the regex to be delimited. Instead of:

'^([^=]*)=["\']?([^"\']*)["\']?$'

try:

'/^([^=]*)=["\']?([^"\']*)["\']?$/'
Bart Kiers
  • 161,100
  • 35
  • 287
  • 281