2012-04-13 77 views
0

如何將這些替換組合成一個正則表達式?合併幾個mb_ereg_replace() - 調用

$style = $node->getAttribute("style"); 
$style = mb_ereg_replace("(direction:[[:space:]]*(rtl|ltr);)", "", $style) . " direction: {$direction};"; // remove existing direction-attribute and add the new one 
$style = mb_ereg_replace("(^[[:space:]]*)|([[:space:]]*$)", "", $style); // trim spaces at the end and beginning 
$style = mb_ereg_replace("([[:space:]]){2,}", " ", $style); // limit spaces to one at a time 
$node->setAttribute("style", $style); 

表達式按預期工作,但我想將它們組合到少於三個替換語句。
我不能只是替換現有的方向屬性,因爲我不知道是否有任何方向屬性。

編輯
新增交替前兩個替代:

$style = mb_ereg_replace("(direction:[[:space:]]*(rtl|ltr);)|(^[[:space:]]*)|([[:space:]]*$)", "", $style) . " direction: {$direction};"; // remove existing direction-attribute and trim spaces at the end and beginning and add the new one 
$style = mb_ereg_replace("([[:space:]]){2,}", " ", $style); // limit spaces to one at a time 
+1

您可以將它們列爲[alternatives](http://www.regular-expressions.info/alternation.html)。 – mario 2012-04-13 10:29:29

+0

我知道,但我在問[mb_ereg_replace()](http://il.php.net/manual/en/function.mb-ereg-replace.php)。如果你能指點我一個更好的解決辦法,而不是告訴我,我不應該使用的東西不應該被使用,我會很高興,@Truth。 – fragmentedreality 2012-04-13 10:30:17

+1

@Truth:['mb_ereg'](http://php.net/mb_ereg)不是。 (也不贊成使用它,並不意味着它可能會很快被刪除。) – mario 2012-04-13 10:31:20

回答

1

這是我做的方式:TRIM()替換您的第二個正則表達式(除非你想保留的換行符,是否會有一些)

我用了preg_replace做到了,你應該使用ereg_functions什麼(它的略有不同,但沒有什麼複雜的)

$style = trim(preg_replace('~direction:(\\s*?)(rtl|ltr);~','',$style) . " direction: {$direction};"); 
$style = preg_replace('~(\\s*?){2,}~',' ',$style); 
+0

對不起,這給了我:'style =「d i r e c t i o n:r t l;'' - 來自第二個'preg_replace()'。 – fragmentedreality 2012-04-13 11:05:31

+0

給出一些示例代碼請參閱 – Mohammer 2012-04-13 11:06:34

+0

'$ direction'可以是「rtl」或「ltr」,'$ style'是一個不尋常的CSS指令。在最好的情況下,它是空的,在最壞的情況下,它包含的東西包括'方向:rtl;'您可以從'$ style =「方向開始:ltr:」; $ direction =「rtl」;'。這就是所有這些功能。 – fragmentedreality 2012-04-13 11:11:13