Как мы сопоставляем любой отдельный символ, включая перевод строки в регулярном выражении 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
модификатор в регулярном выражении, чтобы заставить точку соответствовать всем символам, включая новую строку.