在使用正则表达式时,我被告知点字符.
将匹配一切。
除了换行符\n
。
还有其他例外吗? NUL 字符\0
、退格字符\b
或任何其他各种不可打印的 ASCII 字符又如何呢?
不同的实用程序/程序(例如 sed、awk、perl 和 vim)在这方面的行为是否不同或相同?
答案1
从info regex
:
3.2 匹配任意字符运算符 (`.') =========================================== 该运算符匹配任何单个打印或非打印字符 除非它不匹配: 新队 如果未设置语法位“RE_DOT_NEWLINE”。 无效的 如果设置了语法位“RE_DOT_NOT_NULL”。
答案2
.
相当于[^\n]
所有标准 UNIX 正则表达式风格,但是,在 Windows 上,这通常是[^\r\n]
由于 Windows 样式行结尾的语法造成的。在其他平台上,它应该评估标准换行序列是什么。
在 Perl 和其他一些语言中,单行模式.
也将匹配\n
(或[\r\n]
在 Windows 正则表达式风格等上),使其真正匹配任何内容。
请记住, 的含义.
可能会根据上下文而变化,例如,在 POSIX 方括号表达式中,点字符与文字点匹配。