PHP RegEx: İki Strings Arasındaki Boşluk Çizgili nasıl

2 Cevap php

Ben bir noktalı virgül aşağıdaki boşluk kaldıracak bir regex yazmaya çalışıyorlar (';') hem açık ve yakın kaşlı ayraç arasında olduğunda ('{', '}'). Ben bir yerde kazanılmış ettik ama koparmak mümkün olmamıştır. İşte ne var:

<?php
 $output = '@import url("/home/style/nav.css");
body{color:#777;
 background:#222 url("/home/style/nav.css") top center no-repeat;
 line-height:23px;
 font-family:Arial,Times,serif;
 font-size:13px}'
 $output = preg_replace("#({.*;) \s* (.*[^;]})#x", "$1$2", $output);
?>

Aşağıdaki gibi $ çıkış olmalıdır. Ayrıca, olması gerektiği gibi dizesindeki ilk virgül hala boşluklarla takip olduğunu fark.

<?php
 $output = '@import url("/home/style/nav.css");
body{color:#777;background:#222 url("/home/style/nav.css") top center no-repeat;line-height:23px;font-family:Arial,Times,serif;font-size:13px}';
?>

Teşekkürler! Denemek isteyen herkese şimdiden.

2 Cevap

Ne gerek ilk maçı ({} arasında dize) bulmak ve bunun üzerine çalışmalıdır. Fonksiyonu preg_replace_callback () sizin için hile yapmak gerekir:

function replace_spaces($str){
        $output = preg_replace('/(;[[:space:]]+)/s', ';', $str[0]);
        return $output;
}

 $output = '@import url("/home/style/nav.css");
body{color:#777;
 background:#222 url("/home/style/nav.css") top center no-repeat;
 line-height:23px;
 font-family:Arial,Times,serif;
 font-size:13px}';
 $out = preg_replace_callback("/{(.*)}/s", 'replace_spaces', $output);

Birden maçlar için bu çimdik gerekebilir.

CSS regular language olmadığından Regex bu iş için kötü bir araçtır. Eğer farkındayız gibi özellik değerleri boşluk rastlamak. Regexes böylesi çerçeveler anlamıyorum.

Ben size CSS küçültmek için çalışıyoruz varsayalım. Bunun için araçlar vardır. O kullanmanızı öneririz. O ya da CSS ve minimal boşluk ile can çıkışını ayrıştırmak bir kütüphane olsun ya.

Eğer regex rota aşağı gidiyor ısrar ederse, belki try Stunningly Simple CSS Minifier.