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

SoL*_*oST 2 php regex replace preg-replace

好吧,我讨厌承认它,但我很难用REGEX,我找不到一个关于如何设置表达式的体面教程.

所以说我有这样的事情

context['something']
Run Code Online (Sandbox Code Playgroud)

我想将所有事件都更改为

context[something] 
Run Code Online (Sandbox Code Playgroud)

然后我有

' . $var . ' 
Run Code Online (Sandbox Code Playgroud)

我想将所有事件都更改为

{var} 
Run Code Online (Sandbox Code Playgroud)

这是当前的概念,但我遇到了正则表达式部分的问题.我正在使用str_replace但是随着语言的改变,我认为它不会那么稳定.

这是我的尝试.

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

它一直有效,直到你把它们分配到一个文件然后它变坏了.

这是当前的设置

// 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); 
Run Code Online (Sandbox Code Playgroud)

只需要一个正确的方法来评论它们,以便稍后在保存期间将它们转换回来.

有人可以帮忙吗?

谢谢 :)

cod*_*ict 5

让你的比赛不贪婪.

更改

.+
Run Code Online (Sandbox Code Playgroud)

.+?
Run Code Online (Sandbox Code Playgroud)

有用!!

说明:

量词+是默认的贪心.

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

一些技巧:

你的正则表达式中没有第一组和第三组的真正需要:'/(\' \. \$)(.+)( \. \')/'.所以你可以放弃第一对和第三对(...).如果您只想分组使用(?:..)而不是(..)用于分组+捕获.

\\n不鼓励在更换部件中使用.它应该仅用作正则表达式中的反向引用.要在替换零件中使用捕获组,请使用$n.

程序有上述变化