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

Я хотел бы использовать регулярное выражение 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 ответа

Решение

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

И. е., Поиск

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

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

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

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

Другие вопросы по тегам