Regulärer Ausdruck für CSS Klasse/ID in PHP

Koushirou

Neuling
Thread Starter
Mitglied seit
06.11.2005
Beiträge
437
Hiho zusammen.

Ich hänge derzeit an einer Funktion mit der ich eine CSS Datei per file() Zeilenweise als Array speicher und dann mit preg_match() überprüfe ob in der Zeile eine Klasse oder ID steht.

Nun will ich aber das wirklich nur ID's und Klassen genommen werden und Sachen wie

h1 {
Eigenschaft: Wert;
}

a, a:hover {
Eigenschaft: Wert;
}

nicht genommen werden.

Ich habe es schon so weit das wirklich nur die Zeilen mit den Klassen und ID's genommen werden aber leider auch die wo ich nicht haben möchte.

Aber ich weiß echt nicht mehr was ich an meinem Regulären Ausdruck ändern muss damit nur einzelne Klassen und ID's genommen werden.

Hier ist mal mein Ausdruck:

PHP:
"/^\.|#?([^(*.,.*)])([a-zA-Z0-9])^\.|#?([a-zA-Z0-9])*.\{$/i"

Ich hoffe ihr könnt mir helfen.

Schonmal vielen Dank im voraus :)
 
Wenn Du diese Anzeige nicht sehen willst, registriere Dich und/oder logge Dich ein.
ich muss gestehen, dass ich dein problem nicht ganz verstehe.

wie soll denn ein beispiel match aussehen?
 
Ich möchte am Ende nurnoch die Namen der Klassen und ID's haben damit ich ein select Feld machen kann um eine Klasse oder ID zu wählen.

Insgesamt soll man eine CSS Datei wählen können wovon die Klassen und ID's rausgelesen werden um diese dann per select einem Element zuweisen zu können.

Beispiel:

PHP:
foreach($read as $line) {
		if(preg_match("/^\.|#?([^(*.,.*)])([a-zA-Z0-9])^\.|#?([a-zA-Z0-9])*.\{$/i", $line)) {
			$class .= "<option value=\"".$line."\">".$line."</option>";
		}
}


Das ist mein derzeitiger Code.
$read ist der array wo die Zeilen der CSS Datei drin sind und wenn über preg_match eine Klasse oder ID gefunden wird soll eine option für ein select Feld gemacht werden mit dem Namen, natürlich noch mit . oder # damit ich später zwischen Klassen und ID's unterscheiden kann.

Das sieht dann z.B. so aus
PHP:
<select>
    <option value="body { " >body {</option>
    <option value="a, a:hover, a:link {" >a, a:hover, a:link {</option>
    <option value="a {">a { </option>
    <option value="a:hover {" >a:hover {</option>
    <option value="ul {">ul { </option>
    <option value="li {">li { </option>
    <option value="h1 {" >h1 {</option>
</select>

Diese Einträge sollen nicht da sein
Müsste dann nurnoch die { weg machen.
 
Zuletzt bearbeitet:
ah ok. Allerdings weiss ich nicht inwieweit das sinnvoll ist, eine klasse macht ja oftmals nur im context des selectors sinn und der bestimmt sich nicht durch die css datei sondern durch die HTML Struktur. dann muesstest du, um die richtigen klasse zuweisen zu koennen auch das html parsen
 
Zuletzt bearbeitet:
Es ist für ein Modul für das CMS Redaxo.

Es ist dafür gedacht das wenn jemand anderes einen Artikel bearbeitet das er sieht was es für Klassen gibt und was diese macht ohne das in die CSS Datei geschaut werden muss.
 
dann wuerde ich aber nur Klassen nehmen die ohne selector sind bzw sehr allgemein gehalten wurden (span.green), weil sie sonst unter umstaenden einfach nicht greifen koennen.
Die Vergabe von ids wuerde ich nicht erlauben, das kann zuviel kaputt machen.
 
Mhh, das stimmt mit den ID's, daran hab ich jetzt nicht gedacht das dann vielleicht mal ausversehen eine doppelt genommen wird.

Dann werd ich mal zumindest die ID's rausnehmen.
 
also, ohne selectoren oder sonstwas solltes es so gehen

/^\s*([a-z]+){0,1}\.([a-z0-9]+)\s*{/is

sollte auf folgendes passen:
span.className
className

mehr ist IMHO nicht praktikabel.
 
Hardwareluxx setzt keine externen Werbe- und Tracking-Cookies ein. Auf unserer Webseite finden Sie nur noch Cookies nach berechtigtem Interesse (Art. 6 Abs. 1 Satz 1 lit. f DSGVO) oder eigene funktionelle Cookies. Durch die Nutzung unserer Webseite erklären Sie sich damit einverstanden, dass wir diese Cookies setzen. Mehr Informationen und Möglichkeiten zur Einstellung unserer Cookies finden Sie in unserer Datenschutzerklärung.


Zurück
Oben Unten refresh