Java正则表达式取目标字符串简单范例

本篇只讲述JAVA正则表达式类java.util.regex的取字符串的使用方法,关于正则表达式的语法及使用不在本篇的描述之中,若有需要可参看《正则表达式30分钟入门教程》

首先做完范例需要一个待解析字符串,这里顺带把最近一个项目中的jdbcUrl拿来解析好了,字符串如下

1
jdbc:mysql://127.0.0.1:3306/test

这里说下目标需求,即把这段jdbcUrl分解成IP(127.0.0.1)、端口号(3306)以及数据库名(test),现将Java中的操作分为以下几步:

①书写正则表达式

正则表达式分别如下:

IP:(?<=//).*(?=:)取”//”和” :”之间的内容
PORT:(?<=\d:).*(?=/)取”数字+:”和” /”之间的内容
DBNAME:(?<=\d/).*”)取”数字+/”后面的内容

这里用正则表达式测试工具可以实时看到效果。

②JAVA中生成一个Pattern,同时预编译生成正则表达式匹配模式

1
2
3
Pattern patternDbIp = Pattern.compile("(?<=//).*(?=:)");;
Pattern patternDbPort = Pattern.compile("(?<=\\d:).*(?=/)");
Pattern patternDbName = Pattern.compile("(?<=\\d/).*");

首先创建匹配给定输入与此模式的匹配器,使用compild()方法将给定的正则表达式编译到模式中。
这里注意需要把\d换成\\d 否特殊字符转义则会出现 Invalid escape sequence (valid ones are \b \t \n \f \r \” \’ \\ ) 错误

③创建Matcher匹配器并匹配出目标内容

代码如下

1
2
3
4
5
6
7
8
9
10
11
12
13
String jdbcUrl = "jdbc:mysql://127.0.0.1:3306/test";

Matcher mDbIp = patternDbIp.matcher(jdbcUrl);
mDbIp.find();
String dbIP = mDbIp.group());

Matcher mDbPort = patternDbPort.matcher(jdbcUrl);
mDbPort.find();
String dbPort = mDbPort.group();

Matcher mDbName = patternDbName.matcher(jdbcUrl);
mDbName.find();
String dbName = mDbName.group();

通过调用模式的 matcher()方法从模式创建匹配器,并通过Matcher的find()方法扫描输入序列以查找与该模式匹配的下一个子序列。
最后调用group()方法返回由以前匹配操作所匹配的输入子序列,即本例中的目标字符串。

以上即完成了使用正则表达式取目标字符串的使用,关于对字符串的判定,如IP地址违规判定,我们后续开篇。
本篇到此,谢谢关注。

BeiTown
2014-06-02

本文链接:Java正则表达式取目标字符串简单范例

转载声明:BeiTown原创,转载请注明来源:BeiTown's Coder 编码之源,谢谢


Tags: , , , ,