我们如何匹配任何单个字符,包括Perl正则表达式中的换行符?

bob*_*obo 4 regex text pcre ultraedit

我想使用UltraEdit正则表达式(perl)将以下文本替换为一堆html文件中的其他文本:

<style type="text/css">

#some-id{}

.some-class{}

//many other css styles follow

</style>
Run Code Online (Sandbox Code Playgroud)

我尝试使用<style type="text/css">.*</style>但当然它不匹配任何东西,因为点匹配除换行之外的任何字符.我想匹配换行符,换行也许\r\n或者\n.

正则表达式应该如何?

非常感谢大家.

Ama*_*osh 6

通常,点.匹配除新行之外的所有字符.使用s 正则表达式中修饰符强制点匹配包括换行符在内的所有字符.


Tim*_*ker 5

在UltraEdit中,您需要预先添加(?s)到正则表达式以使点匹配换行符.

I. e.,搜索

(?s)<style type="text/css">.*?</style>
Run Code Online (Sandbox Code Playgroud)

我也做了量词lazy(.*?),因为否则你会匹配整个文件中从第一个<style>到最后一个</style>的所有内容.

另外请注意,这是一个片状解决方案,因为正则表达式无法可靠地解析HTML.在UltraEdit中,这就是你所拥有的 - 脚本语言和解析器会更好,但如果它适用于你的情况,那么很棒.只要确保你没有比想要的更多(或更少)(想想//comment containing a </style> tag).