2016-02-26 21 views
8

sto cercando di trasformare valida CSS in questo modo:Regex per aggiungere selettori manca per non validi CSS

{color:red}

e renderla valida in questo modo:

.missing_selector{color:red}

Esempio CSS:

a { 
color:black; 
background-color:blue; 
} 

{color:red} 
<!-- TEST --> 

@media screen and (max-width:620px) { 
/* TEST 2 */ 
a.test {color:blue;} 
p[class="test2"] {color:green;} 
} 

La mia corrente espressione regolare:

/([^a-z0-9\)\];\-_]*\{)/i

prova dal vivo:

http://www.phpliveregex.com/p/eMq

+0

Solo un suggerimento, non una risposta, ma forse questa libreria aiuta: https://github.com/sabberworm/PHP-CSS-Parser Una soluzione con regex da sola è piuttosto soggetta a errori, suppongo. – Jan

+0

Puoi provare ['/^\h*\K(?={)/m'](https://regex101.com/r/mC7pI5/1) e sostituirlo con' .missing_selector' –

risposta

6

La soluzione

È necessario utilizzare questo:

/(?<=\A|\})(\s*)\{/m 

Sostituire con:

01.235.164,106 mila
.missing-selector { 

Il (?<=\A|\}) fa in modo che non vi unica cosa (diverso dallo spazio) prima della { è l'inizio della stringa o una chiusura }. (Grazie a Casimir et Hippolyte per segnalare il problema.)

Here's a regex101 demo.

Perché il vostro tentativo fallito

Questo

/([^a-z0-9\)\];\-_]*\{)/i 

non fa quello che si pensa.

  • ( inizia un gruppo di acquisizione
  • [^a-z0-9\)\];\-_] richiede un carattere diverso a-z, 0-9, ), ], ;, - o _
  • * zero o più volte
  • \{ richiede l'{
  • ) termina il gruppo di cattura

ma non avere un ^, quindi non è legato alla partenza di una linea, né convalidare ciò che viene prima della { (che dovrebbe essere solo l'inizio della stringa , spazio bianco o }).Di conseguenza, esso corrisponderà ovunque si dispone di una serie di spazi o altri caratteri non alfanumerici (escluse )];-_) nel CSS di esempio:

screenshot of regex101 demo

See this regex101 demo for a fuller explanation and example matches.

+0

Grazie a @EdCottrell, questo fa esattamente quello che mi serve. Apprezzo molto anche la spiegazione. – user2266497