2011-07-01 6 views
1

に行の先頭からすべてを置き換えます。フォーマットのコンテンツでは、等号

KEY=VALUE 

のように:

LISTEN=I am listening. 

私はいくつかの交換使用して正規表現を行う必要があります。 =正規表現の前に何も置き換えないでください(行の先頭から、 'EN'のようなキーが "TOKEN"のようなキーを置き換える必要はありません)。

私はこれを使用していますが、動作していないよう:

$content = preg_replace('~^'.$key.'\s?=[^\n$]+~iu',$newKey,$content); 
+0

KEY1=VALUE1 HELLO=WORLD KEY3=VALUE3 

結果は、この($key=HELLO$newKey=BYE場合)になりますか? '$ key'、' $ newKey'、 '$ content'とは何ですか?いくつか例を挙げていただけますか? – Toto

答えて

1
$content = "foo=one\n" 
     . "bar=two\n" 
     . "baz=three\n"; 

$keys = array(
    'foo' => 'newFoo', 
    'bar' => 'newBar', 
    'baz' => 'newBaz', 
); 
foreach ($keys as $oldKey => $newKey) { 
    $oldKey = preg_quote($oldKey, '#'); 
    $content = preg_replace("#^{$oldKey}(?=)#m", "{$newKey}\\1", $content); 
} 

echo $content; 

出力:

newFoo=one 
newBar=two 
newBaz=three 
1
$str = 'LISTEN=I am listening.'; 
$new_key = 'ÉCOUTER'; 

echo preg_replace('/^[^=]*=/', $new_key . '=', $str); 
0
$content = 'LISTEN=I am listening.'; 
$key = 'LISTEN'; 
$newKey = 'NEW'; 


$content = preg_replace('~^'.$key.'(\s?=)~iu',$newKey.'$1',$content); 

echo $content; 

出力はNEW=I am listening.

である。しかし、部分一致

に変更されませんされて10
$content = 'LISTEN=I am listening.'; 
$key = 'TEN'; 
$new_key = 'NEW'; 

$content = preg_replace('~^'.$key.'(\s?=)~iu',$newKey.'$1',$content); 

echo $content; 

出力はLISTEN=I am listening.

+0

構文解析エラー:予期しないT_LNUMBER、T_VARIABLEまたは '$'を予期しています。 – binaryLV

+0

@binaryLV - ありがとう、テスト結果を追加しました:) – cordsen

0

これはトリックを行う必要があります。 \ Aは行の先頭であり、かっこは保持/置換するものをグループ化するためのものです。

$new_content = preg_replace("/\A(.*)(=.*)/", "$key$2", $content); 
1

私はよくあなたの質問を理解している場合は、m修飾子を使用して複数行モードを切り替える必要があります。私は予期しない結果を避けるためにpreg_quoteを使用して$keyをエスケープすることをお勧めしますちなみに

$content = preg_replace('/^'.preg_quote($key, '/').'(?=\s?=)/ium', $newKey, $content); 

。ソースコンテンツが、この場合で

ので: `はwork`していないようです何

KEY1=VALUE1 
BYE=WORLD 
KEY3=VALUE3