我看到的唯一棘手的部分'.' 当匹配多行字符串时:使用错误的选项,它可以比需要的更多匹配,并且它可以引入bacjtracking问题(由于非贪婪的匹配).
该点匹配单个字符,而不关心该字符是什么.唯一的例外是换行符.
在大多数正则表达式中,默认情况下,点与新行字符不匹配.因此,默认情况下,点是否定字符类[^ \n](UNIX正则表达式)或[^\r \n](Windows正则表达式)的缩写.
这种例外主要是出于历史原因.使用正则表达式的第一个工具是基于行的.他们会逐行读取文件,并将正则表达式分别应用于每一行.结果是,使用这些工具,字符串永远不会包含换行符,因此点永远不会匹配它们.
我不会说"危险",至少不是一般的.然而:
.*应该尽可能避免,因为它可以通过大量的回溯来杀死正则表达式的性能,因为它试图找到最佳匹配,如果输入后出现的令牌不止一次,你可能不会得到你想要的比赛,因为它正在寻找最长的比赛..*?有助于回溯问题,并消除"太长的匹配"问题,但不使用.一点往往更有效.
因为.可以匹配任何东西(除了通常是行尾),它可能匹配你不打算/期望的东西.在安全意识的背景下,这可能是危险的.