我只是想知道如何为 preg_replace 应用几个规则而不在第一次运行时执行它们。它有点复杂,让我根据一个例子来解释。
输入:
$string = 'The quick brown fox jumps over the lazy freaky dog';
规则:
- 将a , i , o替换为u(如果不是在单词的开头,如果不是在元音之前/之后)
- 将e,u替换为i(如果不是在单词的开头,如果不是在元音之前/之后)
- 将ea替换为i(如果不是在单词的开头)
- 用猫替换整个词 ie dog用wolf替换fox(不应用上述规则)
输出: 这只快速的棕色狼跃过这只 luzy friky 猫
我从这样的事情开始:(编辑感谢 Ezequiel Muns)
$patterns = array();
$replacements = array();
$patterns[] = "/(?<!\b|[aeiou])[aio](?![aeiou])/";
$replacements[] = "u";
$patterns[] = "/(?<!\b|[aeiou])[eu](?![aeiou])/";
$replacements[] = "i";
$patterns[] = '/ea/';
$replacements[1] = 'i';
$patterns[] = '/dog/';
$replacements[0] = 'cat';
echo preg_replace($patterns, $replacements, $string);
输出:
Thi qiick briwn fix jimps ivir thi lizy friiky dig
编辑:
如您所见,问题在于每条规则都被前一条规则覆盖。
示例“狐狸”:
- 规则:把狐狸变成狐狸
- 规则:将fux变成fix
如果角色已经受到上一条规则的影响,有没有办法避免以下规则?
这有意义吗?