preg_replace问题

时间:2011-06-22 21:26:22

标签: php regex preg-replace

我想把一个文本而不是字符串VERSION = 20101203,我的问题只是preg_replace的第一个字段,我是正常表达的新手。我不知道如何告诉preg_replace看到我需要为其他文本更改字符串VERSION=20101203

因此字符串的格式为:VERSION=YEARMONTHDAY

我正在尝试:

$new_content = preg_replace('/^VERSION\=[0-9]{8}/', $replacement, $content);

其中:

$ replacement是我想要的新字符串 $ content是这里无关紧要的文件内容

我相信它并不太难。如果您对此问题有任何疑问,请与我联系,我会尽快回答

非常感谢您提前

3 个答案:

答案 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:抱歉我的英文