欢迎各位兄弟 发布技术文章
这里的技术是共享的
正则表达式中,点(.)是指不含换行符(\n)(但包含 Tab)在内的所有字符。
要把 \n 也包含在内怎么办?
很多人的答案是:[.\n]。包括微软的某些教程也是这么说的。但是这个说法错误的,包括 [.\s]、[.\r\n] 也是错误的,[\n.]、[\s.] 也是错误的。
如下字符串:
用 s[.\n]*?e,是取不到任何记录的,可以在 http://regexlib.com/RETester.aspx?AspxAutoDetectCookieSupport=1 测试。如果您觉得它不保险,也可以自己写程序来测试。
正确的做法
s[\s\S]*?e,这样就有两条记录了,均是以 s 开头、e 结尾。\s 是空白字符,包含 \n、空格、Tab 等,而 \S 则是 \s 以外的。* 后面加上 ? 表示懒惰匹配。
还有一种做法:s(.|\n)*?e。
相关阅读
结果运行之后才发现,无法获得换行之后的文本。于是查了一下手册,才发现正则表达式中,“.”(点符号)匹配的是除了换行符“\n”以外的所有字符。
查出了一个解决办法,经过一试,果然可以匹配包括换行符在内的任意字符,以下为正确的正则表达式匹配规则:
([\s\S]*)