我一直在为我的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文件执行此操作。
非常感谢。
答案 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
。