我想把一个文本而不是字符串VERSION = 20101203,我的问题只是preg_replace的第一个字段,我是正常表达的新手。我不知道如何告诉preg_replace看到我需要为其他文本更改字符串VERSION=20101203
。
因此字符串的格式为:VERSION=YEARMONTHDAY
我正在尝试:
$new_content = preg_replace('/^VERSION\=[0-9]{8}/', $replacement, $content);
其中:
$ replacement是我想要的新字符串 $ content是这里无关紧要的文件内容
我相信它并不太难。如果您对此问题有任何疑问,请与我联系,我会尽快回答
非常感谢您提前
答案 0 :(得分:3)
^
将正则表达式锚定到该行的开头。我认为这是问题的一部分。
$new_content = preg_replace('/VERSION\=[0-9]{8}/', $replacement, $content);
此外,您还需要确保$replacement
包含完整字符串,以替换VERSION\=[0-9]{8}
匹配的字符串。
答案 1 :(得分:1)
尝试使用此代码(在正则表达式的开头没有^
):
$content='foo VERSION=20101203 foo bar';
var_dump( preg_replace('/VERSION=[0-9]{8}/', 'replacement', $content));
string(23) "foo replacement foo bar"
答案 2 :(得分:0)
Jason McCreary的建议解决了这个问题。它只是没有^工作,其余的代码与我之前的相同。
我试图更改字符串VERSION = YEARMONTHDAY(位于$ ks文件的其中一行)。我的意思是该文件包含在其中一行中: VERSION = 20101203(或任何其他日期,但每次都使用相同的格式)
该字符串将由与存储在变量$ ks中的文件的最后修改匹配的新字符串更改。 ($ ks是文件的名称)
$last_modification = filemtime($ks);
$last_modification = date("Ymd", $last_modification);
// $last_modification (for instance suppose it is VERSION=20110622)
$last_modification="VERSION=" . $last_modification;
// Open the file in order to change the string
$file = $ks;
$fh = fopen($ks, 'r+');
$content = fread($fh, filesize($ks));
$new_content = preg_replace('/VERSION\=[0-9]{8}/', $last_modification, $content);
fclose($fh);
// Open the file in order to write inside it
$fh = fopen($ks, 'r+');
fwrite($fh, $new_content);
fclose($fh);
所以最终的结果将是:名为$ ks的文件将有一行VERSION = 20110622,而不是VERSION = 20101203(或任何其他旧日期)字符串。
代码对我来说这样工作正常。再次感谢大家,我不知道是否必须解决这个问题,因为它已经解决了
PD:抱歉我的英文