在一些引号之间preg_replace PHP

时间:2015-03-30 00:14:41

标签: php regex preg-replace

我对preg_replace感到有点困惑,因为我之前没有使用过正则表达式。 我做了一些搜索,无法找到适合我情况的任何内容。

我有包含与服务器建立连接的日志,如下所示:

Username connected, address "123.123.123.123:1234"

我希望preg_replace能够找到这个部分:

address "123.123.123.123:1234"

并改为:

address "snip"

基本上剪掉了IP地址,因此这些日志可以在网站上公开发布。

这是我目前正在测试的内容。

$new_log = preg_replace('/\address\s"(.*)"/', '', $old_log);

我只需要帮助正确使用正则表达式。

1 个答案:

答案 0 :(得分:2)

这应该适合你:

(在这里,我将文件的所有行都放入file()的数组中。之后我将address "[ip]"部分替换为address "snip" preg_replace()。最后我只需使用file_put_contents()

将数组再次保存在文件中
<?php

    $lines = file("logs.txt");
    $lines = preg_replace("/\baddress\s?\".*?\"/", "address \"snip\"", $lines);
    file_put_contents("logs.txt", $lines);

?>

正则表达式解释:

\baddress\s?\".*?\"
  • \ b 在字边界处断言位置(^ \ w | \ w $ | \ W \ w | \ w \ W)
    • 地址字面匹配字符地址(区分大小写)
  • \ s?匹配任何空格字符[\ r \ n \ t \ f]
    • 量词:在零到一次之间,尽可能多次,根据需要回馈[贪心]
  • \“匹配字符”字面意思
  • 。*?匹配任何字符(换行符除外)
    • 量词: *?在零和无限次之间,尽可能少,根据需要进行扩展[懒惰]
  • \“匹配字符”字面意思

之前的示例文件:

Username connected, address "123.123.123.123:1234"
Username connected, address "123.123.123.123:1234"

后:

Username connected, address "snip"
Username connected, address "snip"

旁注:

如果您想了解有关正则表达式内容的更多信息,还有一些有用的链接: