Bir regex ile css Ayrıştırma

2 Cevap php

Ben bir css dosyası üzerinden tarama ve yorumlarınızı ve css hem yakalamak isteyen kulüpler. Ben birden çok beyanları yani ile özelliklerini dışarı özlüyor ancak oldukça mükemmel değil, neredeyse orada bir regex ile geldi

ul.menu li a, # Won't capture this line
ul.nice-menu li a { text-decoration: none; cursor:pointer; }

İşte ben çalışıyorum regex bulunuyor:

(\/\*[^.]+\*\/\n+)?([\t]*[a-zA-Z0-9\.# -_:@]+[\t\s]*\{[^}]+\})

Ben rubular.com bu test ve burada şu anda maçlar ne olduğunu ve dizi çıktısı gibi ne oldum.

Sonuç 1

[0] /* Index */
/*
GENERAL

PAGE REGIONS
- Header bar region
- Navigation bar region
- Footer region           
SECTION SPECIFIC
- Homepage
- News */

[1] html { background: #ddd; }

Sonuç 2

[0]
[1] body { background: #FFF; font-family: "Arial", "Verdana", sans-serif; color: #545454;}

Düzenli ifadeler için geldiğinde ben hala bir yeni olduğumu işaret gerekir, bu yüzden herkes yardımcı ve yanlış gidiyorum gösterisi eğer, çok takdir ediyorum :)

BTW: I'm using PHP and preg_match_all

2 Cevap

CSS tam bir regex ile çözümlenen olamaz (CSS Dilbilgisi bakın: http://www.w3.org/TR/CSS2/grammar.html). {...} Örneğin, hatları üzerinde bölünebilir, ve geçerli sürümü, bu idare olmaz. Bunu yapmak gerekiyorsa, CSS spec okumak ve bir ayrıştırıcı oluşturmak için Antlr gibi bir araç kullanılmalıdır.

İşte W3C spec bir örnektir (http://www.w3.org/TR/CSS2/syndata.html):

@import "subs.css";
@import "print-main.css" print;
@media print {
  body { font-size: 10pt }
}
h1 {color: blue }

Hiç normal regex iç içe {...} vb Dursun ithal stylesheets'e içeriği ile başa çıkmak için yeterince güçlü olduğunu.

Hangi dili kullanıyorsunuz?

Muhtemelen sadece CSS ayrıştırmak için bir kütüphane kullanmanız gerekir. Kütüphaneler keder bir çok kaydedebilirsiniz.