Как мы сопоставляем любой отдельный символ, включая перевод строки в регулярном выражении Perl? - PullRequest
4 голосов
/ 20 мая 2010

Я хотел бы использовать регулярное выражение UltraEdit (perl), чтобы заменить следующий текст другим текстом в связке html-файлов:

<style type="text/css">

#some-id{}

.some-class{}

//many other css styles follow

</style>

Я пытался использовать <style type="text/css">.*</style>, но, конечно, он не будет ничего соответствовать, потому что точка соответствует любому символу, кроме перевода строки. Я также хотел бы сопоставить перевод строки и перевод строки может быть либо \r\n, либо \n.

.

Как должно выглядеть регулярное выражение?

Большое спасибо всем вам.

Ответы [ 2 ]

6 голосов
/ 20 мая 2010

Обычно точка . соответствует всем символам, кроме новой строки. Используйте модификатор s в регулярном выражении , чтобы точка соответствовала всем символам, включая новую строку.

5 голосов
/ 20 мая 2010

В UltraEdit вам нужно добавить (?s) к вашему регулярному выражению, чтобы точка соответствовала новой строке.

I. е., поиск

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

Я также сделал квантификатор ленивым (.*?), потому что в противном случае вы бы сопоставили все от первого <style> до последнего </style> во всем вашем файле.

Также имейте в виду, что это нестабильное решение, потому что регулярные выражения не могут надежно анализировать HTML, если вообще. В UltraEdit это все, что у вас есть - язык сценариев и парсер были бы лучше, но если он работает в вашем случае, то отлично. Просто убедитесь, что вы не соответствуете больше (или меньше), чем вы хотели (подумайте //comment containing a </style> tag).

...