假设我有以下字符串:
Some Text Here }
}
如何进行preg_replace,以便只更换线上的“}”?
我希望以下内容有效,但不会:
preg_replace('/^(\s*)(\})(\s*)/', etc);
答案 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|$)/