You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用正则表达式捕获JDBC连接串中的服务器(主机+端口)信息

问题:捕获JDBC连接串中的服务器(主机和端口)部分

需要从JDBC连接串中提取服务器(主机+端口)部分。JDBC连接串以jdbc:开头,之后是数据库类型,再是服务器信息。注意数据库类型后可能带有@(如oracle:thin:@)或//(如db2://)。

示例连接串

jdbc:oracle:@mydbhost:1521/mydbservice
jdbc:oracle:thin:@tcp://mydbhost:1521/mydbservice
jdbc:oracle:thin:@tcp://mydbhost1,mydbhost2:1521/mydbservice
jdbc:oracle:thin:@tcp://mydbhost1:5521,mydbhost2:1521/mydbservice
jdbc:oracle:thin:@tcp://mydbhost1:5521/mydbservice:dedicated
jdbc:oracle:thin:@tcps://mydbhost1:5521/mydbservice?wallet_location=/work/wallet
jdbc:oracle:thin:@tcps://mydbhost1:5521/mydbservice?wallet_location=/work/wallet&ssl_server_cert_dn="Server DN"
"jdbc:db2://sysmvs1.stl.ibm.com:5021/STLEC1"

说明:上述示例中,Oracle的服务器信息为mydbhost:1521,DB2的为sysmvs1.stl.ibm.com:5021。

现有问题

我编写的正则无法匹配第一个Oracle连接串的服务器信息:

(?<dbms>(?:jdbc:[^\/]*))(\/\/)?(?<server>[^\/\?\s`'";]+)

需求补充:需要定位到@的位置,若@后存在//则跳过@及//部分再捕获服务器信息;现有正则以/作为终止符,无法正确匹配第一个示例的服务器信息。

解决方案

修改后的正则表达式

jdbc:[^@\/]*@?(?:\/\/)?(?<server>[^\/\?\s`'";:]+(?::\d+)?(?:,[^\/\?\s`'";:]+(?::\d+)?)*)

正则逻辑解释

  • jdbc:[^@\/]*:匹配从jdbc:开始到第一个@或/之前的数据库类型部分
  • @?:匹配可选的@符号(兼容带@的Oracle连接串格式)
  • (?:\/\/)?:匹配可选的//(非捕获组,不单独提取,兼容DB2等带//的格式)
  • (?<server>...):命名捕获组,精准提取服务器信息:
    • [^\/\?\s'";:]+:匹配主机名(排除/、?`、空格、引号、分号、冒号等分隔符)
    • (?::\d+)?:匹配可选的端口号(冒号+数字组合)
    • (?:,[^\/\?\s'";:]+(?::\d+)?)*`:支持多主机场景(逗号分隔,每个主机可带独立端口)

匹配效果验证

  • 第一个Oracle示例:捕获mydbhost:1521
  • DB2示例:捕获sysmvs1.stl.ibm.com:5021
  • 多主机示例:捕获mydbhost1:5521,mydbhost2:1521

内容的提问来源于Stack Exchange,提问作者Setu Kumar Basak

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 18:07:30