2011-12-07 14 views
-1

CSSのショートカット文字のパターンが右上 - 左下 - 左(例:10px 20px 40px 0)で、アイテム番号2とitemをスワップする正規表現を探していますナンバー4(スワップ左右)。この正規表現は、%とemだけでなくpx値も識別できなければならず、0は識別子なしで存在することができることを考慮する必要があります。正規表現を検索して文字列を検索する

+0

は、これは少し混乱しています。すべての要件をカバーするいくつかの例(前/後の比較)を示してください。 –

+0

前: "10pxの20ピクセル4PX 5pxの" 後: "1EM 2ピクセル50%12ピクセル" 後: "1EM 12ピクセル、50%の2ピクセル" 希望これは、物事をクリアし "10pxの5pxの4PX 20ピクセル" - - とも 前に –

答えて

1

あなたは、このように正規表現を使用することができます

$subject = '10px 20% 40px 0'; 
$result = preg_replace('/(\d+(?:px|em|%)?)\s+(\d+(?:px|em|%)?)\s+(\d+(?:px|em|%)?)\s+(\d+(?:px|em|%)?)/i', '$1 $4 $3 $2', $subject); 
echo $result; // Prints: 10px 0 40px 20% 
+0

これはちょうど素晴らしい、働いて、バターのように滑らかです:)ありがとう –

0
$string = 'margin: 10px 20px 40px 0; padding: 10px 20px 40px 0;'; 
$pattern = '/((margin|padding|border)\:)(\s*\S+)(\s+\S+)(\s+\S+)(\s+[^;.]+)/i'; 
$replacement = '$1$3$6$5$4'; 
echo preg_replace($pattern, $replacement, $string, -1, $count); 
+0

交互に '(?:margin | padding | border)'に非キャプチャグループを使うことができます。 '$ 2'は役に立たないわけではありません。 – stema

+0

申し訳ありません、行ってください。 CSSファイルでは、>> padding:15px "\ 201C" "\ 201D" quotes:10px ;; <<に翻訳された有効なステートメントを見ることができ、またborderステートメントを>> background:url(0; padding:。 ./images/bodyBg.jpg)repeat <<(リピートが破損した) –

0

あなたはこのような何かを意味してください:

(0|\d+(?:px|em|%))\s(0|\d+(?:px|em|%))\s(0|\d+(?:px|em|%))\s(0|\d+(?:px|em|%)) 

here on Regexr

それを参照してください

$1 $4 $3 $2 

と交換してください説明:

この式は4つのキャプチャグループで構成されているため、1つしか説明しません。

これは、式の前後に大括弧があるため、キャプチャグループです。第2のブラケットペアは、キャプチャしていないグループのために、開きブラケットの後に?:を持っています。代替案をグループ化するだけで、私は部分的な結果を保存する必要はありません。

(0|\d+(?:px|em|%)) 

この式はpxem、又は%続く数字の0または直列(\d+)と一致します。

これらの式は、空白文字の\sを使用してまとめられます。

(\d+(?:px|em|%)?)\s+(\d+(?:px|em|%)?)\s+(\d+(?:px|em|%)?)\s+(\d+(?:px|em|%)?) 

をそしてそうのようにそれを実装:

関連する問題