2010-03-23 220 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}