簡體   English   中英

正則表達式如果存在則替換行,如果不存在則添加行

[英]Regular Expression to replace line if exist, add line if not

我需要通讀 Apache httpd.conf 文件,並找到以下行:

#LoadModule blah blah

並取消注釋,即替換為

LoadModule blah blah

這里要注意的是,由於 conf 文件可能會有所不同,因此 LoadModule 行很可能已經被取消注釋。

也有可能該行根本不存在,在這種情況下,我的腳本必須在 conf 文件的末尾添加這樣一行。

知道如何在 PHP 中寫這個嗎?

嘗試這個:

preg_replace('/^#(LoadModule blah blah)/m', '$1', $str)

如果blah blah應該是可變的,請將其替換為“ .+ ”。

$line  = "LoadModule blah blah";
$input = "your config file";
$count = 0;
$limit = 1;  // replace first occurrence only, change to -1 to replace all

$output = preg_replace("/^#?(?=\Q$line\E)/m", "", $input, $limit, $count);

if ($count == 0) $output = $output."\n$line";
<?php
$found = false;
$f = fopen('apache.conf', 'r+');

while($line = fgets($f)) {
    if(preg_match("/^(#*)(\s*)LoadModule\s+blah.*/", $line)) {
        $found = true;
        if(substr($line, 0, 1) == '#') {
            fputs($f, preg_replace("/^(#+)(\s*)/", "", $line));
        }
        break;
    }
}

if(!$found) {
    fputs($f, "LoadModule blah blah\n");
}

fclose($f);
?>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM