2009-11-19 9 views
1

Je crée un générateur CSS en PHP qui utilise des fichiers CSSX (oui, ce sont mes idées) (avec une syntaxe spéciale). Une caractéristique est 'court': commentairesRemplacer // commentaires avec/* commentaires */dans PHP

body 
{ 
    font-family: Georgia; //I really like this font! 
} 

Maintenant, je veux remplacer ce commentaire avec/* ... */commentaire, de sorte que la sortie est comme ceci:

body 
{ 
    font-family: Georgia; /*I really like this font!*/ 
} 

Comment puis-je fais ça? Merci,

P.S. Le fichier CSSX complet est lu dans une variable de chaîne.
P.P.S Ce q est répondu. Pour résoudre le problème url ('// server/etc.cssx'), utilisez ceci:

$file = preg_replace('~[^"\'\(]//([^\r\n]*)[^"\'\)]~', '/*$1*/', $file); 

Répondre

5

Une expression rationnelle devrait faire l'affaire:

$str = preg_replace('_//(.*)$_m', '/*$1*/', $str); 

Cela ne prendra pas en compte les chaînes entre guillemets - Si vous utilisez quelque chose de fou comme

background-image: url('//my-server/my.jpg'); 

alors il va penser que c'est un commentaire. Si c'est un problème, il vaut mieux écrire un analyseur approprié.

+0

Impressionnant cela a fonctionné! –

+0

@Koning: ils spécifient simplement le délimiteur pour l'expression régulière. Vous pouvez utiliser plusieurs caractères, et 'preg_replace' supposera que le premier est le délimiteur que vous voulez utiliser. Le délimiteur "standard" est '/', mais alors vous devrez échapper '/' 'dans le motif. – jheddings

+0

Hmmm, déplacez le retour à la ligne, et je pense que vous êtes réglé: http://codepad.org/uNV7jQmb – Kzqai

3
<? preg_replace('#//(.*)$#', '/*$1*/', $cssx); ?> 
+0

Vous aviez 26 secondes à la fin, mais je vais upvote^_^ –

+0

@Koning: Je ne peux pas rivaliser avec les doigts de foudre de Greg ... tnx – jheddings

1

expression Greg a deux problèmes: d'abord, « m » et « $ » sont superflus, seconde, il ne gère pas correctement les retours chariot (dans le cas où votre système les utilise).

Une meilleure expression semble être

preg_replace('~//([^\r\n]*)~', '/*$1*/', $str); 
+0

Eh bien, c'est vraiment important que ça va marcher OSX, Linux et Windows puisque je vais libérer la source. –