preg_replace大括号,它是行上唯一的字符?

时间:2011-01-27 20:01:03

标签: php regex

假设我有以下字符串:

Some Text Here }
}

如何进行preg_replace,以便只更换线上的“}”?

我希望以下内容有效,但不会:

preg_replace('/^(\s*)(\})(\s*)/', etc);

3 个答案:

答案 0 :(得分:2)

以下内容应该有效:

preg_replace('/^\s*\}\s*$/m', $replacement, $subject);
  • s*表示任意数量的角色。您可能的意思是\s*,任意数量的whitespace characters
  • 您需要为^ multiline启用anchor模式,以便按行进行操作;默认设置是^是开头,$是整个字符串的结尾,而不是一行。
  • 请记住$ anchor,否则}hello之类的内容也会匹配。

答案 1 :(得分:1)

^$匹配字符串的开头和结尾。您需要m修饰符才能使此匹配成为的开头和结尾。

您的RE无法按预期工作。 s*匹配s的零个或多个出现次数。您很可能想要使用\s*来匹配空格。

preg_replace('/^(\s*)(\})(\s*)$/m', $replacement, $subject);

答案 2 :(得分:0)

可以在更大的正则表达式中使用的多行免费版本应该需要跨越行:

/(^|\n)([^\S\n]*\}[^\S\n]*)(?=\n|$)/