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)
只需要一个正确的方法来评论它们,以便稍后在保存期间将它们转换回来.
有人可以帮忙吗?
谢谢 :)
让你的比赛不贪婪.
更改
.+
Run Code Online (Sandbox Code Playgroud)
至
.+?
Run Code Online (Sandbox Code Playgroud)
说明:
量词+是默认的贪心.
考虑正在\[(.+)\]尝试匹配和捕获[和之间的所有内容的正则表达式].在输入上[foo]它工作正常并被foo捕获.但在输入[foo] and [bar]它会捕获foo] and [bar!这是行动中的贪婪行为,它使+消费尽可能多.通过使比赛非贪婪,\[(.+?)\]我们告诉+消费尽可能少但仍然试图匹配.所以在这种情况下使用相同的输入它将捕获foo.
一些技巧:
你的正则表达式中没有第一组和第三组的真正需要:'/(\' \. \$)(.+)( \. \')/'.所以你可以放弃第一对和第三对(...).如果您只想分组使用(?:..)而不是(..)用于分组+捕获.
\\n不鼓励在更换部件中使用.它应该仅用作正则表达式中的反向引用.要在替换零件中使用捕获组,请使用$n.