首页 > 解决方案 > 为什么正则表达式中没有“匹配所有”特殊字符?

问题描述

我喜欢正则表达式,但我觉得这很令人困惑,为什么没有“匹配所有”特殊字符?例如,如果我想选择一个 HTML 标记及其内容,我会这样做

re = "<tag>([\s\S]*)</tag>"

你看,[\s\S] 是解决缺少匹配所有特殊字符的解决方法。规范中缺少全匹配是否有原因?我知道,.但也不是那么漂亮: re = "<tag>([.\n]*)</tag>"

标签: regex

解决方案


.是匹配所有字符。默认情况下,它不匹配换行符,但如果您设置DOTALL标志,它将匹配所有字符。在 Python 中,您编写:

re.search(r"<tag>(.*)</tag>", string, re.DOTALL)

为什么这不是默认值?可能是因为大多数正则表达式应用程序希望将匹配限制在一行内(尤其是出于性能原因)。并且有两个单独的字符,一个用于“匹配所有”,另一个用于“匹配除换行符之外的所有字符”,会浪费字符。


推荐阅读