0

我一直在为我的 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 文件执行此操作。

非常感谢帮助。

4

2 回答 2

0

正则表达式应该是:

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

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

为了更全面地了解逃生(和其他快速提示),如果你有 2 美元,我强烈推荐这个备忘单

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

于 2013-06-12T14:01:50.067 回答
0

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

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

用法:

perl -pi regex.txt yourfile.php

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

于 2013-06-12T15:09:32.497 回答