regex - 为什么正则表达式中没有“匹配所有”特殊字符?
问题描述
我喜欢正则表达式,但我觉得这很令人困惑,为什么没有“匹配所有”特殊字符?例如,如果我想选择一个 HTML 标记及其内容,我会这样做
re = "<tag>([\s\S]*)</tag>"
你看,[\s\S] 是解决缺少匹配所有特殊字符的解决方法。规范中缺少全匹配是否有原因?我知道,.
但也不是那么漂亮:
re = "<tag>([.\n]*)</tag>"
解决方案
.
是匹配所有字符。默认情况下,它不匹配换行符,但如果您设置DOTALL
标志,它将匹配所有字符。在 Python 中,您编写:
re.search(r"<tag>(.*)</tag>", string, re.DOTALL)
为什么这不是默认值?可能是因为大多数正则表达式应用程序希望将匹配限制在一行内(尤其是出于性能原因)。并且有两个单独的字符,一个用于“匹配所有”,另一个用于“匹配除换行符之外的所有字符”,会浪费字符。
推荐阅读
- python - Python - 使用日期创建月份周数列表
- spring-boot - New Relic 支持 openJDK12 吗?
- java - 将 JComboBox 添加到 JPanel
- javascript - 重置 JS 秒表时遇到问题
- reactjs - 如何在 ReactJS 中使用全局 javascript 变量?
- c# - 从 asp.core 2.2 迁移到 3.1。Autofac.Core.DependencyResolutionException
- javascript - 如何通过在 JavaScript 和 PHP 中拖放外部事件来更新数据库中的事件?
- java - 如何将有界泛型类型与流和单个对象一起使用
- php - Laravel - 解析具有依赖关系的类并执行实例化类的构造函数
- scala - 如何使用 Spark 有效地检查列中的所有值?