网上关于取任意字符(含换行符)的正则表达式十有八九是错的

作者:vkvi 来源:ITPOW(原创) 日期:2012-8-27

正则表达式中,点(.)是指不含换行符(\n)(但包含 Tab)在内的所有字符。

要把 \n 也包含在内怎么办?

很多人的答案是:[.\n]。包括微软的某些教程也是这么说的。但是这个说法错误的,包括 [.\s]、[.\r\n] 也是错误的,[\n.]、[\s.] 也是错误的。

如下字符串:

s123e
s1
23e

用 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,也可能是 \r\n,根据实际文件不同而不同。

相关阅读

相关文章