【发布时间】:2012-11-21 23:42:45
【问题描述】:
$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。该怎么做?
老实说,我什至不太了解上面的正则表达式模式。 有我知道的和我不知道的代码:
- 在 $pattern 中说:(任何包含两个引号且中间没有引号的单词)或(字符“a”)。在替换中,像 strlen 这样的 php 代码将起作用,因为将使用 /e 修饰符。但我不明白为什么它是一个“或”逻辑。
- 如果模式中第二部分的长度(a 字符)大于零,则将其替换为“i”,否则执行其他操作(我不明白 \0 是什么意思)
我将不胜感激。这个正则表达式的东西让我很沮丧:(
【问题讨论】:
-
\\0是整个匹配项。它只会重新插入正则表达式找到的原始单词。
标签: php regex preg-replace