我有许多文件需要更换部件。这种文件的一个例子是:
u101p-fr-2_2 PAN, 'U101P-FR-2_2', P, BLO='U101P', DT=101, X=FR-2, AS4='M'; CUR, 'CB1', COL=MAGENTA, LTY=SOLID, YZ, 6390.45,5985.01/ 0, 7341.23,6752.51/ 0, 7341.22,6752.5/ R400.01, 7489.98,7063.74/ 0, 7489.98,8863.99; BOU, 'U101P-Y7800', SID=SB/ 'U101P-Z8800', SID=BOT/ 'CB1'/ Z=7063.74; PLA, MAT=20, MSI=FOR, QUA=A, POS=179, NO=1, AS4='P'; FLA, PRO=10,200,20, CUR, LIM=3, QUA=A, POS=734, NO=1, COL=YELLOW, CON=15, CUT=1100, EXC=30/ CON=45, CUT=1402,30; EXC, TYP=TIP1, LIM=4, M1=30; NOT, R50, COR=2;
对于这个特定的例子,我必须将 POS = 179 替换为 POS = 115 并且 POS = 734 更改为 POS = 762
我可以使用以下内容使用Notepad ++: \ bPOS \ = 179 \ b 此外,它似乎适用于http://regexr.com?33hti
等不同网站但是,在PHP中,使用preg_replace它不起作用。 任何帮助将不胜感激!
答案 0 :(得分:2)
所以,你最终决定透露你的代码:
foreach (glob($path_SCH_ModelBun.$unitatea."/*.sch") as $filename){
$file = file_get_contents($filename);
echo "<pre>".$file."</pre><br /><br />";
$search_for = "/\bPOS".preg_quote("=".$search_for)."\b/g";
$replace_with= "POS=".$replace_with;
echo $res = preg_replace($search_for, $replace_with ,$file);
echo " <pre>".$file."</pre> ";
}
您错误地使用了/g
标记。启用error_reporting
以了解正则表达式失败的原因。 PHP PCRE不支持。
此外,您正在使用$res =
来分配修改后的文件内容。
但是你再次将未经修改的原始$file
写出来。
答案 1 :(得分:0)
我相信如果我有POS = 2且POS = 21,那么每个例子它都会改变 结果
您可以使用strtr
来避免:
示例:
$string = 'POS 2 POS 21 POS 27 POS 2 POS 21';
print strtr($string, array(
'POS 27' => 'POS 420', // find => replace
'POS 2' => 'POS 5',
'POS 21' => 'POS 7',
));
最长的匹配将首先被替换,因此您不会遇到任何问题。