2010-03-23 64 views
0

发现这个表达式:

insert " " every 10 characters: 
$text = preg_replace("|(.{10})|u", "\${1}"." ", $text); 

可你,请解释一下\${1}手段。为什么使用\以及大括号是什么意思?

回答

4

引用的preg_replace手册页的一些部分:

replacement可以含有的 形式\\n$n引用与后者 形式是优选的一个

你是,显然,在第二种情况:$n


,后来:

当更换 模式在一个逆向引用的 紧接着另一个号码工作 (即:立即在匹配模式之后放置立即数 ), 您不能使用熟悉的\\1 表示法作为您的反向引用。

\\11,例如,会混淆 preg_replace(),因为它不知道 你是否希望\\1逆向引用 其次是文字1,或\\11 逆向引用后面什么都没有。

在这种情况下,解决方案是 使用\${1}1。这将创建一个单独的反向引用,将1作为 文字。

在这里,你不必后会是什么$1任何东西 - 但我想这不会伤害到使用\${1}符号:我觉得它使代码更易于阅读,有那些{};它确保您不会忘记在需要的时候添加它们。

+0

...并且反斜线可防止PHP将'$ {...}'解析为特殊扩展语法虽然这也可以通过使用单引号来防止。 – Boldewyn 2010-03-23 11:38:52

1

第一个大括号负责计算字符。 .{10}表示:任意角色的10倍。
\ $ {1}表示在第一对缺口中匹配的所有东西。 因此,用它来解释:“用相同的10个字符(\${1})替换空格替换十个字符(.{10}