首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >解析已知节的字符串

解析已知节的字符串
EN

Stack Overflow用户
提问于 2011-03-14 13:35:09
回答 3查看 457关注 0票数 0

我想知道用oracle连接字符串解析“主机”名称的最佳方法是什么。下面是一个连接字符串示例:

Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=MyHost)(PORT=MyPort)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=MyOracleSID)))数据

我把它放在String里了。获得"MyHost“返回的最佳方法是什么。如果它适用于双连接字符串,也是很好的,例如:

(Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=MyHost1)(PORT=MyPort1)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=MyOracleSID1))))(Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=MyHost2)(PORT=MyPort2)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=MyOracleSID2))))) )

将返回"MyHost1“和"MyHost2”。

试图编写一个接收连接字符串并在字符串数组列表中吐出主机/主机的方法。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-03-14 13:38:04

使用这样的正则表达式应该有效:\(HOST=([^)]+)\)

不要忘记在Java String文本中将反斜杠加倍:

代码语言:javascript
复制
Pattern hostPattern = Pattern.compile("\\(HOST=([^)]+)\\)");

使用Matcher和输入字符串创建Patttern,并调用find(),直到返回false为止。使用group(1)获取主机名:

代码语言:javascript
复制
Matcher m = hostPattern.matcher(input);
while (m.find()) {
  System.out.println(m.group(1));
}
票数 3
EN

Stack Overflow用户

发布于 2011-03-14 13:46:25

扩展Joachim的想法(我已经有一段时间没有使用ArrayLists了,所以它可能不是完全正确的):

代码语言:javascript
复制
public List<String> getHosts(String conString) {
  List<String> conns = new ArrayList<String>()
  Pattern hostPattern = Pattern.compile("\\(HOST=([^)]+)\\)");
  Matcher m = hostPattern.matcher(conString);
  while(m.find()) {
    conns.add(m.group(1));
  }
  return conns;
}

编辑:谢谢你的修复,巴特!

票数 1
EN

Stack Overflow用户

发布于 2011-03-14 13:47:41

正则表达式(HOST=(.*?))将"(HOST=MyHost1)“和"(HOST=MyHost2)”部分匹配为包含"MyHost1“和"MyHost2”的两个组。

干杯,

边缘

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5299273

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档