RegEx中的Dot是危险的

2 regex

我的印象是Dot'.' (外卡)角色使用危险.我的恐惧没有根据吗?谢谢

Avi*_*Avi 12

只要你理解它的含义,它就没有危险.它通常匹配输入文本的任何字符.根据正则表达式的风格,它可能匹配也可能不匹配行尾字符.


EBG*_*een 8

钠是危险的,但它是生命所必需的.Dot就像任何其他工具一样,只有像你做的那样危险.如果没有它,我会讨厌尝试编写99%的正则表达式.


Von*_*onC 8

我看到的唯一棘手的部分'.' 当匹配多行字符串时:使用错误的选项,它可以比需要的更多匹配,并且它可以引入bacjtracking问题(由于非贪婪的匹配).

正则表达式教程

该点匹配单个字符,而不关心该字符是什么.唯一的例外是换行符.

在大多数正则表达式中,默认情况下,点与新行字符不匹配.因此,默认情况下,点是否定字符类[^ \n](UNIX正则表达式)或[^\r \n](Windows正则表达式)的缩写.

这种例外主要是出于历史原因.使用正则表达式的第一个工具是基于行的.他们会逐行读取文件,并将正则表达式分别应用于每一行.结果是,使用这些工具,字符串永远不会包含换行符,因此点永远不会匹配它们.


Jan*_*rts 6

VonC骂我指出我的文章."谨慎使用点"部分回答了您的问题.

问题不在于点.问题在于人们在不合适的情况下使用它.


Dav*_*man 5

我不会说"危险",至少不是一般的.然而:

  • .*应该尽可能避免,因为它可以通过大量的回溯来杀死正则表达式的性能,因为它试图找到最佳匹配,如果输入后出现的令牌不止一次,你可能不会得到你想要的比赛,因为它正在寻找最长的比赛..*?有助于回溯问题,并消除"太长的匹配"问题,但不使用.一点往往更有效.

  • 因为.可以匹配任何东西(除了通常是行尾),它可能匹配你不打算/期望的东西.在安全意识的背景下,这可能是危险的.