0

我想

ereg ($rat, $dog, $cat)

成为

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

为了实现这一点,我做到了

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

但是,这个正则表达式改变了

ereg ($rat, $dog, $cat)

进入

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

代替

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

有人可以帮我建立一个改变的正则表达式

ereg ($rat, $dog, $cat)

进入

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

5 回答 5

2

只需排除','...

echo 'ereg ($rat, $dog, $cat)' | sed "s/ereg\(.*\)(\([^,]*\),/preg_match\1('#'.\2.'#',/g"
于 2011-01-13T20:23:03.580 回答
2

注意:如果您ereg ($rat, $dog, $cat)在同一行上有多个实例,这也适用,而其他答案没有:

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

例子

$ 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)
于 2011-01-13T20:23:27.970 回答
1
~ ross$ echo 'ereg ($rat, $dog, $cat)' | sed -e "s/.*(\([^,]*\),\([^,]*\),\([^)]*\))/preg_match ('#'.\1.'#', \2, \3)/"
preg_match ('#'.$rat.'#',  $dog,  $cat)
于 2011-01-13T20:22:12.430 回答
1

怎么样:

$ echo 'ereg ($rat, $dog, $cat)' | sed "s/ereg *(\([^,]*\), \([^,]*\)\([^)]*\))/preg_match('#'.\1.'#', \2\3)/g"
preg_match('#'.$rat.'#', $dog, $cat)
于 2011-01-13T20:26:22.653 回答
0

我更喜欢 Perl 正则表达式(更容易编写):

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

或更好(对于 PHP):

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

sed中,它将是:

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

反斜杠太多!!!

于 2011-01-13T20:30:32.780 回答