對於格式的內容:替換一切從行開始等號
KEY=VALUE
,如:
LISTEN=I am listening.
我需要做一些使用正則表達式替換。我希望這個正則表達式在=之前用$ key替換任何東西(使它必須從行首開始,所以像'EN'這樣的關鍵字不會替換「TOKEN」之類的關鍵字)
以下是我正在使用的,但它似乎並沒有工作:
$content = preg_replace('~^'.$key.'\s?=[^\n$]+~iu',$newKey,$content);
對於格式的內容:替換一切從行開始等號
KEY=VALUE
,如:
LISTEN=I am listening.
我需要做一些使用正則表達式替換。我希望這個正則表達式在=之前用$ key替換任何東西(使它必須從行首開始,所以像'EN'這樣的關鍵字不會替換「TOKEN」之類的關鍵字)
以下是我正在使用的,但它似乎並沒有工作:
$content = preg_replace('~^'.$key.'\s?=[^\n$]+~iu',$newKey,$content);
$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
$str = 'LISTEN=I am listening.';
$new_key = 'ÉCOUTER';
echo preg_replace('/^[^=]*=/', $new_key . '=', $str);
$content = 'LISTEN=I am listening.';
$key = 'LISTEN';
$newKey = 'NEW';
$content = preg_replace('~^'.$key.'(\s?=)~iu',$newKey.'$1',$content);
echo $content;
輸出NEW=I am listening.
不過是部分匹配不改變
$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.
這應該做的伎倆。 \ A是一行的開始,括號用於將事物分組以保留/替換。
$new_content = preg_replace("/\A(.*)(=.*)/", "$key$2", $content);
如果我明白你的問題很好,你需要切換多行模式使用m
修改。
$content = preg_replace('/^'.preg_quote($key, '/').'(?=\s?=)/ium', $newKey, $content);
通過我不建議使用preg_quote
,以避免意外的結果,以逃避$key
的方式。
因此,如果源內容是這樣的:
KEY1=VALUE1
HELLO=WORLD
KEY3=VALUE3
結果將是(如果$key=HELLO
和$newKey=BYE
):
KEY1=VALUE1
BYE=WORLD
KEY3=VALUE3
'似乎什麼並不work'?什麼是'$ key','$ newKey'和'$ content'?你能舉一些例子嗎? – Toto