2010-05-20 5 views
4

Je voudrais utiliser l'expression régulière UltraEdit (perl) pour remplacer le texte suivant avec un autre texte dans un tas de fichiers html:Comment faire correspondre un seul caractère, y compris le saut de ligne dans l'expression régulière Perl?

<style type="text/css"> 

#some-id{} 

.some-class{} 

//many other css styles follow 

</style> 

J'ai essayé d'utiliser <style type="text/css">.*</style> mais bien sûr, il ne serait pas correspondre à quelque chose parce que le point correspond à n'importe quel caractère sauf le saut de ligne. Je voudrais également faire correspondre le saut de ligne et le saut de ligne peut-être \r\n ou \n.

À quoi l'expression régulière devrait-elle ressembler?

Un grand merci à vous tous.

Répondre

5

Dans UltraEdit, vous devez ajouter (?s) à votre regex pour que le point corresponde à la nouvelle ligne.

I. e., Rechercher

(?s)<style type="text/css">.*?</style> 

J'ai aussi fait le quantificateur paresseux (.*?) parce que sinon vous correspondre à tout de la première à la dernière <style></style> dans votre dossier complet.

Sachez également qu'il s'agit d'une solution floconnante car les expressions régulières ne peuvent pas analyser le code HTML de manière fiable, voire pas du tout. Dans UltraEdit, c'est tout ce que vous avez - un langage de script et un analyseur seraient mieux, mais si cela fonctionne dans votre cas, alors génial. Assurez-vous simplement que vous ne correspondez pas plus (ou moins) que vous le vouliez (pensez //comment containing a </style> tag).

+0

Quelqu'un peut-il dire pourquoi (? S) fonctionne? – redDevil

+0

@redDevil: La première phrase de ma réponse l'explique: Ce modificateur permet au point de correspondre aux caractères de nouvelle ligne (ce qui n'est pas le cas par défaut). Voir aussi la réponse d'Amarghosh et le tutoriel qui s'y rapporte. –

6

Normalement le point . correspond à tous les caractères autres que la nouvelle ligne. Utilisez le smodifier in the regex pour forcer le point à correspondre à tous les caractères, y compris la nouvelle ligne.

Questions connexes