Question

I want

ereg ($rat, $dog, $cat)

to become

preg_match ('#'.$rat.'#', $dog, $cat)

To achieve this, I did

echo 'ereg ($rat, $dog, $cat)' | sed "s/ereg\(.*\)(\(.*\),/preg_match\1('#'.\2.'#',/g"

but, this regex changed the

ereg ($rat, $dog, $cat)

into

preg_match ('#'.$rat, $dog.'#', $cat)

instead of

preg_match ('#'.$rat.'#', $dog, $cat)

Can someone help me to build a regex that changes

ereg ($rat, $dog, $cat)

into

preg_match ('#'.$rat.'#', $dog, $cat)
Was it helpful?

Solution

Just exclude ','...

echo 'ereg ($rat, $dog, $cat)' | sed "s/ereg\(.*\)(\([^,]*\),/preg_match\1('#'.\2.'#',/g"

OTHER TIPS

Note: This also works if you have multiple instances of ereg ($rat, $dog, $cat) on the same line whereas other answers do not:

$ echo 'ereg ($rat, $dog, $cat)' | sed "s/ereg\([^(]*\)(\([^,]*\),\([^)]*)\)/preg_match\1('#'.\2.'#',\3/g"
preg_match ('#'.$rat.'#', $dog, $cat)

Example

$ echo 'ereg ($rat, $dog, $cat) ereg ($rat, $dog, $cat)' | sed "s/ereg\([^(]*\)(\([^,]*\),\([^)]*)\)/preg_match\1('#'.\2.'#',\3/g"
preg_match ('#'.$rat.'#', $dog, $cat) preg_match ('#'.$rat.'#', $dog, $cat)
~ ross$ echo 'ereg ($rat, $dog, $cat)' | sed -e "s/.*(\([^,]*\),\([^,]*\),\([^)]*\))/preg_match ('#'.\1.'#', \2, \3)/"
preg_match ('#'.$rat.'#',  $dog,  $cat)

How about:

$ echo 'ereg ($rat, $dog, $cat)' | sed "s/ereg *(\([^,]*\), \([^,]*\)\([^)]*\))/preg_match('#'.\1.'#', \2\3)/g"
preg_match('#'.$rat.'#', $dog, $cat)

I rather like Perl regexs (easier to write):

echo 'ereg ($rat, $dog, $cat)' | perl -pe 's/ereg\s*\(\s*(\$[^,]+),(.+)\)/preg_match("#" . $1 . "#", $2)/g'

or better (for PHP):

echo 'ereg ($rat, $dog, $cat)' | perl -pe 's/ereg\s*\(\s*(\$[^,]+),(.+)\)/preg_match("#{$1}#", $2)/g'

In sed, it would be:

echo 'ereg ($rat, $dog, $cat)' | sed -e 's/ereg\s*(\s*\(\$[^,]\+\),\(.\+\))/preg_match("#" . \1 . "#", \2)/'

Too many backslashes!!!

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top