Hey. I'm trying to parse a CSS file using PHP.
Ben bu ifadeyi çalıştırmak çalışıyorum:
"/(". $selector . "\\s*{[\\w\\s:\\-;()#]*)(" . $property . ":)([^;}]+)(}?)/Ui"
Bu regex bir seçici içinde belirli bir özellik aşağı bacağına ve beni çıkarın / o değerini değiştirmek için izin gerekiyordu.
Rasyonel:
- seçici ile eşleşen ve mülkiyet Yukarıdaki metin bulunuyor
- özellik adı eşleşen
- özellik değeri ile eşleşmesi
- değer} işaretiyle biterse - de bunu yakalamak
Kırık bit # 3 - bazı bilinmeyen bir nedenle, ben preg_match ile bu çalıştırdığınızda, değer grubu (# 3), sadece ilk karakter yakalar.
Örneğin, bu ifade çalışan:
preg_replace("/(h1\s*{[\w\s:\-;()#]*)(font-size:)(([^;}])+)(}?)/Ui","$1 $4",$css);
(H1 seçicinin font-size özelliği bulmak ve mülkiyet ve değerini kaldırın)
Bu css grup:
h1{
background:#fff;
font-size:10px;
text-align:underline;
color:#abc;
}
Alıyorum:
h1{
background:#fff;
/* note that although the property was matched and removed,
the value only matched the 1st char: 1 */
0px;
text-align:underline;
color:#abc;
}
Ben bazı test araçları yoluyla ifade kontrol etmek için denedim ve iyi çalıştı, bu yüzden bu bir gebelik * belirli bir sorun olduğunu tahmin ediyorum.
Ben ne yapıyorum yanlış herhangi bir fikir?