我想知道用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”。
试图编写一个接收连接字符串并在字符串数组列表中吐出主机/主机的方法。
发布于 2011-03-14 13:38:04
使用这样的正则表达式应该有效:\(HOST=([^)]+)\)。
不要忘记在Java String文本中将反斜杠加倍:
Pattern hostPattern = Pattern.compile("\\(HOST=([^)]+)\\)");使用Matcher和输入字符串创建Patttern,并调用find(),直到返回false为止。使用group(1)获取主机名:
Matcher m = hostPattern.matcher(input);
while (m.find()) {
System.out.println(m.group(1));
}发布于 2011-03-14 13:46:25
扩展Joachim的想法(我已经有一段时间没有使用ArrayLists了,所以它可能不是完全正确的):
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;
}编辑:谢谢你的修复,巴特!
发布于 2011-03-14 13:47:41
正则表达式(HOST=(.*?))将"(HOST=MyHost1)“和"(HOST=MyHost2)”部分匹配为包含"MyHost1“和"MyHost2”的两个组。
干杯,
边缘
https://stackoverflow.com/questions/5299273
复制相似问题