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

注:これは、同じ行に複数のインスタンスがある場合にも機能しますが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 に答える
2

「、」を除外するだけです...

echo 'ereg ($rat, $dog, $cat)' | sed "s/ereg\(.*\)(\([^,]*\),/preg_match\1('#'.\2.'#',/g"
于 2011-01-13T20:23:03.580 に答える
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 に答える