簡體   English   中英

PHP全局替換ereg(i)(_ replace)

[英]PHP replace ereg(i)(_replace) globally

我需要更改150多個PHP文件(將ereg更新為preg_match)。 我厭倦了手動更新它們但它需要永遠,我想確保我的所有替換將第一次工作。 我該怎么做才能做這種操作?

這是我的ereg(i)的一些例子

if(eregi("^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$", $ip)) { /* ... */}
if (eregi($regexp, $label, $match)) { /* ... */}
$string = eregi_replace("[[:space:]]+", ' ', $string);

謝謝

#!/bin/bash
perl -p -i -e "s/eregi_replace *\\( *\"([^\@]+?)(?<\!\\\\)\", */preg_replace(\"\@\\1\@i\", /g" $1
perl -p -i -e "s/eregi_replace *\\( *\'([^\@]+?)(?<\!\\\\)\', */preg_replace(\'\@\\1\@i\', /g" $1
perl -p -i -e "s/ereg_replace *\\( *\"([^\@]+?)(?<\!\\\\)\", */preg_replace(\"\@\\1\@\", /g" $1
perl -p -i -e "s/ereg_replace *\\( *\'([^\@]+?)(?<\!\\\\)\', */preg_replace(\'\@\\1\@\', /g" $1
perl -p -i -e "s/eregi *\\( *\"([^\@]+?)(?<\!\\\\)\", */preg_match(\"\@\\1\@i\", /g" $1
perl -p -i -e "s/eregi *\\( *\'([^\@]+?)(?<\!\\\\)\', */preg_match(\'\@\\1\@i\', /g" $1
perl -p -i -e "s/ereg *\\( *\"([^\@]+?)(?<\!\\\\)\", */preg_match(\"\@\\1\@\", /g" $1
perl -p -i -e "s/ereg *\\( *\'([^\@]+?)(?<\!\\\\)\', */preg_match(\'\@\\1\@\', /g" $1

這是我使用的一個小bash腳本。 有時間比我多的人可能會將所有這些都壓縮成較少(1?)的正則表達式,但它應該可以解決問題。 隨意用您選擇的分隔符替換@ 只需將其粘貼到文件chmod +x ,然后調用它,將文件作為參數傳遞。

如果你需要集體使用它,這樣的東西就足夠了:

find /path/to/your/project -name '*.php' -exec foo {} \;

其中foo是你命名為bash腳本的任何東西。

注意:這不是完美的,所以你仍然需要手動更改它錯過的任何邊緣情況,但它仍然會為你節省大量的工作。 另請注意,這會進行就地文件編輯。

替換實際的ereg調用將是進行搜索/替換操作的相當簡單的事情。 但實際上修復你的模式以包含preg要求的分隔符有點不重要。 你可以輕松地做到:

$newcode = str_replace('eregi("', 'preg_match("/', $oldcode));

但是你仍然需要找到模式結束的位置以在那里添加分隔符,以及i修飾符。 而且你必須為ereg調用的每個變體執行此操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM