$value = "abrak'adabra' baba";
$pattern = array();
$replacement = array();
$pattern[] = '/(\'[^\']+\')|(a)/e';
$replacement = "strlen('\\2') ? 'i' : '\\0'";
上面的代码将 abrak'adabra'baba 更改为 ibrik'adabra'bibi
我想要做的是将 abrak'adabra'baba 改为 abrak'idibri'baba 。怎么做?
老实说,我甚至不太了解上面的正则表达式。 有我所知道的,我不知道代码:
我会感激任何帮助。这个正则表达式的东西让我感到沮丧:(
答案 0 :(得分:0)
在模式中使用e
修饰符(eval)是危险的,因为有人可能会在您的服务器上执行恶意代码(有关详情,请参阅the manual's部分)。
相反,如果您需要对匹配的项目进行额外处理,则可以使用preg_replace_callback
:
// Find all characters between single quotes
$result = preg_replace_callback('/\'(.*?)\'/', function($matches){
// Replace 'a' with 'i' in found matches
return '\''.str_replace('a', 'i', $matches[1]).'\'';
}, $value);
如果您所做的只是在引号之间用a
替换i
,可能会有更好的方法来解决它,但这样您就有了对字符串进行更高级处理的空间在引号之间找到。