PHP,替换多个文件中的文本

需求:

    需要对两个目录中的文件内容进行查找替换,两个目录查找替换的内容不一样。

    实现中注意几点:

    (1)函数递归调用,来检索子目录;

    (2)函数名可以以参数形式传递;

    (3)用?进行非贪婪匹配;

    (4)每行匹配查找、整个文件内容匹配查找

 

<?php
 
//loopdir('dir1', 'repfile1');
loopdir('dir2', 'repfile2');
 
function loopdir($dir, $fun){
	$dp = opendir($dir);
	chdir($dir);
	while( $v = readdir($dp) ){
		if( is_dir($v) ) {
			//排除当前目录 "."及上层目录 ".."
			if( $v!="." && $v!="..") loopdir($v, $fun);
		}
		else $fun($v);
		echo $v."<br>";
	}
	chdir("..");
}
 
function repfile1($filename){
	$content = file_get_contents($filename);
	if( empty($content) ){
		echo "can't open file to read: ".$filename;
		return ;
	}
 	//加?号是进行非贪婪匹配,以免匹配的块太大
	$content = preg_replace('/if /(!validateEmail/((.*?)"Email address is not valid(.*?})/s',
						'if (!validateEmail(//1"Email address is not valid//2else if (!isNyhEmail(//1"Can not add NYH email addresses.//2',
						$content);
 
	writenewfile($filename, $content);
}
 
function repfile4615($filename){
	$fpr = fopen($filename, 'r');
	if( empty($fpr) ){
		echo "can't open file to read: ".$filename;
		return ;
	}
 	$newContent = '';
	while( $line = fgets($fpr) ){
		$line = preg_replace('/^(.*)/$var_kitchen_dishwasher = "kitchen"./$kitchen_ind."_dishwasher";/s',
						'//1$var_kitchen_dishwasher = "kitchen"./$kitchen_ind."_dishwasher";
//1$var_kitchen_oven = "kitchen".$kitchen_ind."_oven";
//1$var_kitchen_fridge = "kitchen".$kitchen_ind."_fridge";', $line);
 
		$newContent .= $line;
	}
	fclose($fpr);
	writenewfile($filename, $newContent);
}
 
function writenewfile($filename, $content){
	$fpw = fopen($filename, 'w');
	if( empty($fpw) ){
		echo "can't open file to write: ".$filename;
		return ;
	}
	fwrite($fpw, $content);
	fclose($fpw);
}
 
?>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值