仅替换文件形式 preg_replace 中的特定组

Kry*_*ska 3 php regex preg-replace preg-match

我有包含内容的txt文件:

fggfhfghfghf

$config['website'] = 'Olpa';


asdasdasdasdasdas
Run Code Online (Sandbox Code Playgroud)

以及用于替换文件中的 preg_replace 的 PHP 脚本:

write_file('tekst.txt', preg_replace('/\$config\[\'website\'] = \'(.*)\';/', 'aaaaaa', file_get_contents('tekst.txt')));
Run Code Online (Sandbox Code Playgroud)

但它并不能完全按照我想要的方式工作。

因为这个脚本替换了整个匹配,更改后它看起来像这样:

fggfhfghfghf

aaaaaa


asdasdasdasdasdas
Run Code Online (Sandbox Code Playgroud)

这很糟糕。

我想要的只是不改变整场比赛$config['website'] = 'Olpa';而只是改变这一点Olpa

在此处输入图片说明

如您所见,它不属于匹配信息的第 2 组。

我想要的只是改变这个第 2 组。一件特定的事情。

最后在脚本之后它看起来像:

fggfhfghfghf

$config['website'] = 'aaaaaa';


asdasdasdasdasdas
Run Code Online (Sandbox Code Playgroud)

Wik*_*żew 8

你需要改变你preg_replace

preg_replace('/(\$config\[\'website\'] = \').*?(\';)/', '$1aaaaaa$2', file_get_contents('tekst.txt'))
Run Code Online (Sandbox Code Playgroud)

这意味着,捕获您需要保留的内容(然后使用反向引用来恢复文本)并匹配您需要替换的内容。

请参阅正则表达式演示

图案详情

  • (\$config\[\'website\'] = \')- 第 1 组捕获文字 $config['website'] = '子字符串(稍后引用 with $1
  • .*? - 尽可能少的除换行符以外的任何 0+ 个字符
  • (\';)- 第 2 组:a'后跟;(后来参考 with $2

如果您aaa实际上以数字开头,则需要${1} 反向引用。