1

我有许多文件需要更换零件。这种文件的一个例子是:

    u101p-fr-2_2
    PAN,'U101P-FR-2_2',P,BLO='U101P',DT=101,X=FR-2,AS4='M';
    CUR, 'CB1', COL=洋红色, 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;
    非,R50,COR=2;

对于这个特定的示例,我必须将POS=179替换为POS=115并将POS=734替换为POS=762

我可以使用 Notepad++ 来做到这一点:\bPOS\=179\b 另外,它似乎可以在不同的网站上使用,比如http://regexr.com?33hti

但是,在 PHP 中,使用 preg_replace 它不起作用。任何帮助将不胜感激!

4

2 回答 2

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以了解您的正则表达式失败的原因。PHPs PCRE 不支持。

您还$res =用于分配修改后的文件内容。但是随后您$file又将未修改的原件写出。

于 2013-01-26T00:44:24.170 回答
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',
));

最长的匹配将首先被替换,因此您不会遇到任何问题。

于 2013-01-26T00:37:42.730 回答