正则表达式Preg_Replace()替换精确字符串

时间:2013-12-11 17:11:01

标签: php regex

我想使用preg_replace()替换%z字符串ź中的任意位置

所以我写道:

$pattern = array();
$pattern[0] = '/^\%z$/';
$replacements = array();
$replacements[0] = '/\ź/';

string = "oraz ró%znego typu innych wydarzen kulturalnych, sportowych i rozrywkowych."
preg_replace($pattern, $replacement, $string);
echo $string;

以上示例无效。我是正则表达式的新手,所以我不太确定我做错了什么。

非常感谢任何建议。 :)

3 个答案:

答案 0 :(得分:1)

从正则表达式模式中删除锚^ and $,因为%z不在输入的开头或结尾:

$pattern[0] = '/%z/';

此外,您不需要提供替换正则表达式分隔符,也不需要转义%&以便这样做:

$replacements[0] = 'ź'

答案 1 :(得分:1)

有几个问题,其中一些没有效果:

  • %无需转义
  • ^$锚定字符串的开头和结尾。删除它们:/%z/
  • 您在函数调用中使用$replacement而不是$replacements
  • 由于您只进行一次替换,因此不需要数组。
  • 您不应在替换中包含PCRE分隔符。它是一个字符串而不是正则表达式。只需将其写为ź
  • 即可

您还可以将preg_replace替换为str_replace来执行简单的字符串替换。只需从pattern删除分隔符。

答案 2 :(得分:1)

在表达式中,您不需要使用字符串^锚点的开头或字符串$锚点的结尾,因为%z不在字符串中的任何一个位置, %&字符也不需要在此转义,因为这是一个简单的替换,我认为不需要使用数组来完成此任务。

您可以使用str_replace

$string = 'oraz ró%znego typu innych wydarzen kulturalnych, sportowych i rozrywkowych.';
$string = str_replace('%z', 'ź', $string);
echo $string;

使用更便宜的版本,strtr(您可以在阵列中放置多个模式和替换)

$string = 'oraz ró%znego typu innych wydarzen kulturalnych, sportowych i rozrywkowych.';
$string = strtr($string, array('%z' => 'ź'));
echo $string;

如果您仍然决定使用正则表达式来执行此操作。

$string = 'oraz ró%znego typu innych wydarzen kulturalnych, sportowych i rozrywkowych.';
$string = preg_replace('/%z/i', 'ź', $string);
echo $string;

输出

oraz róźnego typu innych wydarzen kulturalnych, sportowych i rozrywkowych.