Perl搜索并替换保留字符串的中间部分

时间:2013-06-12 13:53:24

标签: perl

我一直在为我的PHP项目使用Codeigniter而且我一直在使用他们的会话类。

$this->session->userdata('variablename')

我遇到了很多问题所以我决定使用PHP Native session。

$_SESSION['variablename']

这是我到目前为止所得到的

perl -p -i -e "s/$this->session->userdata('.*?$SOMEVAR.*?\')/$_SESSION['$1']/g" offer.php 

但事实要告诉我,我真的不知道自己在做什么。

我还想对我项目中的所有php文件执行此操作。

非常感谢。

2 个答案:

答案 0 :(得分:0)

正则表达式应该是:

s/\$this->session->userdata\('(.?)'\)/$_SESSION['$1']/g

您发布的版本的问题主要是使用未转义的字符 - 您可以通过在字符前添加$来转义\或括号。例如,\$this会找到文本“$ this”,而$this会搜索$this变量的值。

如需更全面地了解逃生(以及其他快速提示),如果您有2美元,我强烈推荐this cheat sheet

此外,您不需要使用您在其中添加的.*?$SOMEVAR.*?构造... Perl将自动捕获在第一对括号中找到的结果并将其存储在$1中,第二组括号获得$2等等。

答案 1 :(得分:0)

当shell引用变得复杂时,最简单的方法就是将源代码放入文件中。你仍然可以将它用作单线。我使用了一个负向前瞻断言,以确保它不会因字符串中的转义单引号而中断。

# source file, regex.txt
s/\$this->session->userdata\('(.+?)(?!\\')'\)/\$_SESSION['$1']/g;

<强>用法:

perl -pi regex.txt yourfile.php

请注意,您只需忽略-e开关。另请注意,-i需要Windows的备份扩展名,例如-i.bak