regex - 从数据库 url 字符串中提取数据库凭据的正则表达式的效率
问题描述
假设我有一个如下所示的 db url 字符串:
"mysql2://foo:bar@baz.com/fizz?reconnect=true"
我想出了一个用于提取用户名、密码和主机名的正则表达式:
/\w:\/\/(\w+):/ # extracts username ("foo")
/\w:\/\/\w+:(\w+)/ # extracts password ("bar")
/\w:\/\/\w+:\w+@([\w+-\/]+)/ # extracts host name ("baz.com")
如何改进/提高这个正则表达式的效率?
解决方案
这是一个正则表达式,将您的 3 组合成一个具有 3 个不同捕获组的正则表达式:
\w:\/{2}(\w+):(\w+)@(\w+\.\w+)
一开始它们似乎是非常简单和快速的正则表达式,但这里有一个测试正则表达式的好工具:https ://regex101.com/ 。它会根据您的样本和捕获组向您显示运行所需的步骤。对我来说,这是我在处理不简单的新正则表达式时首先使用的工具之一。
至于改进正则表达式,您想尝试使引擎执行尽可能少的步骤。因此,正则表达式中的快速匹配和快速失败将有所帮助。例如,如果它始终是 mysql2,您可以2:\/{2}
改为使用 regex 启动,这会根据我上面的 regex 减少 10 个步骤。
推荐阅读
- amazon-web-services - 我们能否为多个 Web 应用程序从单个 devops 存储库创建多个部署
- node.js - 错误“ConnectionError [SequelizeConnectionError]: 无法连接到 localhost:1443 - 无法连接(序列)”使用 sequelize-automate
- php - Symfony\Component\Process\Process 无法运行 audit2allow
- css - CSS动画在IOS中变得断断续续/延迟
- reactjs - React 应用程序在构建后不显示 favicon
- ios - 在 Xcode 中的 ViewController 之间传递变量
- f# - 如何在 f# 中使用十六进制颜色?
- google-data-studio - 计数聚合然后取平均值
- javascript - 如何正确计算某个时刻的分钟数?
- jmeter - JMeter中的多用户登录