如何编写匹配任意字符与换行的正则?匹配Mytext..到EndofMyText
解决正则匹配跨换行文本的问题
嘿,我懂你碰到的麻烦了——你原来的正则之所以没法匹配包含换行的内容,核心原因是**默认情况下,正则里的.元字符是不会匹配换行符(\n)**的,它只能匹配除了换行之外的任意单个字符。
下面给你两种靠谱的解决方案,适配不同的正则引擎场景:
方案1:启用单行模式(Singleline/DOTALL 标志)
大多数正则引擎都支持“单行模式”(有些叫DOTALL),开启后.就会匹配包括换行在内的所有字符。
举几个常用语言的写法:
- Python:使用
re.DOTALL标志import re pattern = re.compile(r'Mytext(.*?)EndofMyText', re.DOTALL) - JavaScript:在正则末尾加
s标志(ES2018+支持)const regex = /Mytext(.*?)EndofMyText/s; - Java:使用
Pattern.DOTALL常量Pattern pattern = Pattern.compile("Mytext(.*?)EndofMyText", Pattern.DOTALL);
方案2:用字符集替代.(不依赖模式标志)
如果你的正则环境不支持单行模式,或者不想额外加标志,可以用一个能覆盖所有字符的字符集来代替.。比如:
[\s\S]*?:匹配所有空白字符(包括换行)和非空白字符,等同于任意字符[\d\D]*?:匹配所有数字和非数字字符[\w\W]*?:匹配所有单词字符和非单词字符
对应的正则表达式就是:
Mytext([\s\S]*?)EndofMyText
小提醒:
记得保留*?这种非贪婪匹配,它会确保匹配到第一个出现的EndofMyText就停止,而不是一直匹配到文本最后一个EndofMyText,避免把中间不需要的内容也包含进去。
内容的提问来源于stack exchange,提问作者mcfly soft
相关产品推荐
相关产品推荐

