發現這個表達式:
insert " " every 10 characters:
$text = preg_replace("|(.{10})|u", "\${1}"." ", $text);
可你,請解釋一下\${1}
手段。爲什麼使用\
以及大括號是什麼意思?
發現這個表達式:
insert " " every 10 characters:
$text = preg_replace("|(.{10})|u", "\${1}"." ", $text);
可你,請解釋一下\${1}
手段。爲什麼使用\
以及大括號是什麼意思?
引用的preg_replace
手冊頁的一些部分:
replacement
可以含有的 形式\\n
或$n
引用與後者 形式是優選的一個。
你是,顯然,在第二種情況:$n
,後來:
當更換 模式在一個逆向引用的 緊接着另一個號碼工作 (即:立即在匹配模式之後放置立即數 ), 您不能使用熟悉的
\\1
表示法作爲您的反向引用。\\11
,例如,會混淆preg_replace()
,因爲它不知道 你是否希望\\1
逆向引用 其次是文字1
,或\\11
逆向引用後面什麼都沒有。
在這種情況下,解決方案是 使用\${1}1
。這將創建一個單獨的反向引用,將1
作爲 文字。
在這裏,你不必後會是什麼$1
任何東西 - 但我想這不會傷害到使用\${1}
符號:我覺得它使代碼更易於閱讀,有那些{}
;它確保您不會忘記在需要的時候添加它們。
第一個大括號負責計算字符。 .{10}
表示:任意角色的10倍。
\ $ {1}表示在第一對缺口中匹配的所有東西。 因此,用它來解釋:「用相同的10個字符(\${1}
)替換空格替換十個字符(.{10}
)
...並且反斜線可防止PHP將'$ {...}'解析爲特殊擴展語法雖然這也可以通過使用單引號來防止。 – Boldewyn 2010-03-23 11:38:52