жадность в седе - PullRequest
       36

жадность в седе

0 голосов
/ 13 января 2011

Я хочу, чтобы

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)

Ответы [ 5 ]

2 голосов
/ 13 января 2011

Просто исключите ',' ...

echo 'ereg ($rat, $dog, $cat)' | sed "s/ereg\(.*\)(\([^,]*\),/preg_match\1('#'.\2.'#',/g"
2 голосов
/ 13 января 2011

Примечание: Это также работает, если у вас есть несколько экземпляров 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)
1 голос
/ 13 января 2011

Как насчет:

$ echo 'ereg ($rat, $dog, $cat)' | sed "s/ereg *(\([^,]*\), \([^,]*\)\([^)]*\))/preg_match('#'.\1.'#', \2\3)/g"
preg_match('#'.$rat.'#', $dog, $cat)
1 голос
/ 13 января 2011
~ ross$ echo 'ereg ($rat, $dog, $cat)' | sed -e "s/.*(\([^,]*\),\([^,]*\),\([^)]*\))/preg_match ('#'.\1.'#', \2, \3)/"
preg_match ('#'.$rat.'#',  $dog,  $cat)
0 голосов
/ 13 января 2011

Мне скорее нравятся регулярные выражения 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)/'

Слишком много обратной косой черты !!!

...