PHP Preg_replace似乎不适合我

时间:2013-01-26 00:23:07

标签: php regex preg-replace

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


    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它不起作用。 任何帮助将不胜感激!

2 个答案:

答案 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',
));

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