2013-05-12 36 views
0

林的preg_replace解碼設置高亮我用(.*?)獲取屬性值的值。的preg_replace與屬性使用

我想用font-size:\10px; (font-size:(.*?)0px;)替換它,例如,如果屬性值是7,那麼字體大小將是70,但相反,它認爲我想要值\ 10。我能做些什麼來區分屬性值和0?

是否有可能做這樣'font-size:'.\1.'0px;'或類似於從零的屬性值分開的東西嗎?

+0

發佈示例inout和您的preg_replace調用。 – anubhava 2013-05-12 21:06:41

+0

preg_replace函數呼叫=' '/ \ [大小\ = 「?(。*?)」?\](。*?)\ [\ /尺寸\]/ms'' 替換='' 的 \\ 2'' sample output =' blalba'(假設值爲7) – 2013-05-12 21:10:07

+0

Pls提供一個示例輸入,以便我可以嘗試您的示例並向您推薦一些東西。 – anubhava 2013-05-12 21:31:19

回答

4

\${1}0是溶液中作爲記錄here

[編輯]

我試過反斜槓的所有可能的金額,不得不說..對我來說這使得完全沒有,即

echo preg_replace('/(2.)/', '\\${1}', '12345'); 

輸出1${1}45

但我找到一個解決方案,heredoc

$a = <<<ABC 
\${1} 
ABC; 
echo preg_replace('/(2.)/', $a, '12345'); 
+1

'' \ 2''我已經試過了,但是它輸出了' – 2013-05-12 21:05:29

+0

它應該是'' \\ 2'' – Matmarbon 2013-05-12 21:06:44

+0

似乎不起作用,就像它將使用單個反斜槓 – 2013-05-12 21:11:25

1

適用於這樣的文字:

$str = <<< EOD 
[size="4"]test1[/size] 
[size="4]test2[/size] 
[size=4"]test3[/size] 
[size=4]test4[/size] 
EOD; 
$pattern = '@\\[size=("?)(\\d++)\\1\\](.*?)\\[/size\\]@s'; 

的preg_replace:

$replace = '<span style="font-size:${2}0px;">$3</span>';  
echo preg_replace($pattern,$replace,$str); 

preg_replace_callback:

$replace = function ($matches) { 
    return sprintf('<span style="font-size:%s0px;">%s</span>', 
     $matches[2], 
     $matches[3] 
    ); 
};  
echo preg_replace_callback($pattern,$replace,$str); 

結果:

<span style="font-size:40px;">test1</span> 
[size="4]test2[/size] 
[size=4"]test3[/size] 
<span style="font-size:40px;">test4</span> 
0

OMG ... PHP手冊會產生很大的混亂......

關於此代碼:

echo preg_replace('/^(1)(2)(3)(4)(5)$/', $r, '12345'); 

預期輸出:

12345!!12345!! 

當使用定界符:

$r = <<< EOD 
$0!!\${1}2\${3}4$5!! 
EOD; 

然而,不使用heredoc:

$r = '$0!!${1}2${3}4$5!!'; 

是,反斜槓是不需要

+0

我認爲應該改進手冊... – mpyw 2013-05-12 21:59:46