Search code examples
regextextpcreultraedit

How do we match any single character including line feed in Perl regular expression?


I would like to use UltraEdit regular expression (perl) to replace the following text with some other text in a bunch of html files:

<style type="text/css">

#some-id{}

.some-class{}

//many other css styles follow

</style>

I tried to use <style type="text/css">.*</style> but of course it wouldn't match anything because the dot matches any character except line feed. I would like to match line feed as well and the line feed maybe either \r\n or \n.

How should the regular expression look like?

Many thanks to you all.


Solution

  • In UltraEdit, you need to prepend (?s) to your regex to make the dot match newline.

    I. e., search for

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

    I've also made the quantifier lazy (.*?) because otherwise you would match everything from the first <style> to the last </style> in your entire file.

    Also be advised that this is a flaky solution because regular expressions can't parse HTML reliably if at all. In UltraEdit, that's all you have - a scripting language and a parser would be better, but if it works in your case, then great. Just make sure you don't match more (or less) than you wanted (think //comment containing a </style> tag).