1

交換が必要な部品が含まれているファイルがいくつかあります。このようなファイルの例は次のとおりです。

    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=179POS=115に、POS=734POS=762に置き換える必要があります。

次のようなものを使用してNotepad++でそれを行うことができます:\ bPOS \ = 179 \ b また、http://regexr.com?33htiのようなさまざまなWebサイトで動作するようです

ただし、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表現が失敗する理由を学習できるようにします。PHPPCREはそれをサポートしていません。

また$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 に答える