PHP-正则表达式删除引号并添加大括号? - php

好吧,我不愿承认这一点,但是我对REGEX感到很困难,我永远找不到关于如何设置表达式的不错的教程。

所以说我有这样的事情

context['something']

我想将所有事件更改为

context[something] 

那我有

' . $var . ' 

我想将所有事件更改为

{var} 

这是当前的概念,但是我在正则表达式部分遇到了麻烦。我正在使用str_replace,但是随着语言的改变,我认为这样不够稳定。

这是我的尝试。

$codes = array (
         '/(\' \. \$)(.+)( \. \')/',
        '/(\[\')(.+)(\'\])/'
);
$html = array (
        '{\\2}',
        '[\\2]',
);
$data = preg_replace($codes, $html, $data); 

它起作用,直到您在文件中分配了它们,然后变坏了。

这是当前设置

// these are temp need a better replace system
$data = str_replace("' . $", "{", $data);
$data = str_replace(" . '", "}", $data);
$data = str_replace("<?php", "", $data);
$data = str_replace("?>", "", $data);
$data = str_replace('context[\'forum_name\']', 'context[forum_name]', $data); 

只需要一种适当的方式来注释这些内容,以便稍后在保存期间将它们转换回去。

谁能帮忙吗?

谢谢 :)

参考方案

使您的比赛不贪心。

更改

.+

.+?

It works!!

说明:

默认情况下,量词+是贪婪的。

考虑正则表达式\[(.+)\],它试图匹配并捕获[]之间的所有内容。在输入[foo]上工作正常,并捕获了foo。但是在输入[foo] and [bar]上它将捕获foo] and [bar !!!这是行动中的贪婪行为,导致+消耗尽可能多的能量。通过使匹配为非贪婪的\[(.+?)\],我们告诉+消耗尽可能少的能量,但仍在尝试匹配。因此,在这种情况下,使用相同的输入将捕获foo

一些技巧:

正则表达式中没有真正的第一和第三组:'/(\' \. \$)(.+)( \. \')/'。因此,您可以删除第一对和第三对(...)。如果您只想分组,请使用(?:..)而不是用于分组+捕获的(..)

不建议在替换零件中使用\\n。它仅应在正则表达式中用作反向引用。要在替换零件中使用捕获组,请使用$n

Program with above changes

PHP strtotime困境 - php

有人可以解释为什么这在我的服务器上输出为true吗?date_default_timezone_set('Europe/Bucharest'); var_dump( strtotime('29.03.2015 03:00', time()) === strtotime('29.03.2015 04:00�…

PHP-全局变量的性能和内存问题 - php

假设情况:我在php中运行一个复杂的站点,并且我使用了很多全局变量。我可以将变量存储在现有的全局范围内,例如$_REQUEST['userInfo'],$_REQUEST['foo']和$_REQUEST['bar']等,然后将许多不同的内容放入请求范围内(这将是适当的用法,因为这些数据指的是要求自…

php-casperjs获取内部文本 - php

我正在为casperjs使用php包装器-https://github.com/alwex/php-casperjs我正在网上自动化一些重复的工作,我需要访问一个项目的innerText,但是我尚不清楚如何从casperjs浏览器访问dom。我认为在js中我会var arr = document.querySelector('label.input…

php:拆分字符串,直到第一次出现数字 - php

我有像cream 100G sup 5mg Children 我想在第一次出现数字之前将其拆分。所以结果应该是array( array('cream','100G'), array('sup','5mg Children') ); 可以告诉我如何为此创建图案吗?我试过了list(…

PHP getallheaders替代 - php

我正在尝试从服务器上的apache切换到nginx。唯一的问题是我在PHP脚本中使用的getallheaders()函数,该函数不适用于Nginx。我已经尝试过用户在getallheaders函数上的php站点上提供的注释,但这并不返回所有请求标头。请告诉我如何解决这个问题。我真的想切换到Nginx。 参考方案 您仍然可以使用它,但是您必须像这里一样重新定义…