好吧,我不愿承认这一点,但是我对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。 参考方案 您仍然可以使用它,但是您必须像这里一样重新定义…