您的位置:首页 > 编程语言 > Java开发

java正则表达式用法

2014-09-27 10:40 316 查看
Pattern p2=Pattern.compile("\\d+");
Matcher m2=p2.matcher("aaa2223bb");
System.out.println(m2.find());
//m2.find();//匹配2223
System.out.println(m2.start());
//m2.start();//返回3
System.out.println(m2.end());
//m2.end();//返回7,返回的是2223后的索引号
System.out.println(m2.group());
//m2.group();//返回2223

java正则表达式通过java.util.regex包下的Pattern类与Matcher类实现

Pattern类用于创建一个正则表达式,也可以说创建一个匹配模式,它的构造方法是私有的,不可以直接创建,但可以通过Pattern.complie(String regex)简单工厂方法创建一个正则表达式,

Pattern p2=Pattern.compile("\\d+");
</pre><span style="font-family:Arial; font-size:14px; line-height:26px">Matcher类的构造方法也是私有的,不能随意创建,只能通过Pattern.matcher(CharSequence input)方法得到该类的实例.</span><p></p><p><span style="white-space:pre"><span style="font-family:Arial; font-size:14px; line-height:26px"><span style="font-family:Arial; font-size:14px; line-height:26px"><span style="font-family:Arial; font-size:14px; line-height:26px"></span></span></span></span></p><pre name="code" class="java">Matcher m2=p2.matcher("aaa2223bb");
Matcher类提供三个匹配操作方法,三个方法均返回boolean类型,当匹配到时返回true,没匹配到则返回false

matches()对整个字符串进行匹配,只有整个字符串都匹配了才返回true

lookingAt()对字符串前面的字符进行匹配,只有匹配到的字符串在最前面才返回true

find()对字符串进行匹配,匹配到的字符串可以在任何位置.

使用下面3个函数可以获取匹配到的子字符串的位置:

Mathcer.start() / Matcher.end() / Matcher.group()

start()返回匹配到的子字符串在字符串中的索引位置.
end()返回匹配到的子字符串的最后一个字符下一个位置的索引
group()返回匹配到的子字符串

现在我们使用一下稍微高级点的正则匹配操作,例如有一段文本,里面有很多数字,而且这些数字是分开的,我们现在要将文本中所有数字都取出来,利用java的正则操作是那么的简单.
Java代码示例:
Pattern p=Pattern.compile("\\d+");
Matcher m=p.matcher("我的QQ是:456456 我的电话是:0532214 我的邮箱是:aaa123@aaa.com");
while(m.find()) {
System.out.println(m.group());
}

输出:
456456
0532214
123

二、Matcher.replaceAll(String replacement) / Matcher.replaceFirst(String replacement)

1、String方法

String.replaceAll()和String.replaceFirst()两个方法的功能,其实它与Matcher.replaceAll()和Matcher.replaceFirst()的功能是一样的

String str="我的QQ是:456456 我的电话是:0532214 我的邮箱是:aaa123@aaa.com";
System.out.println(str.replaceAll("\\d","*"));
输出: 我的QQ是:****** 我的电话是:******* 我的邮箱是:aaa***@aaa.com
2、Matcher方法

Pattern p=Pattern.compile("//d");
Matcher m=p.matcher("我的QQ是:456456 我的电话是:0532214 我的邮箱是:aaa123@aaa.com");
System.out.println(m.replaceAll("*"));
输出: 我的QQ是:****** 我的电话是:******* 我的邮箱是:aaa***@aaa.com
三、Matcher.appendReplacement(StringBuffer sb, String replacement) / Matcher.appendTail(StringBuffer sb)
将当前匹配子串替换为指定字符串,并且将替换后的子串以及其之前到上次匹配子串之后的字符串段添加到一个StringBuffer对象里,
而appendTai­l(StringBuffer sb) 方法则将最后一次匹配工作后剩余的字符串添加到一个StringBuffer对象里.

例子:
Pattern p=Pattern.compile("\\d+");
Matcher m=p.matcher("我的QQ是:456456 我的电话是:0532214 我的邮箱是:aaa123@aaa.com");
m.find();  //匹配到456456
StringBuffer sb=new StringBuffer();
m.appendReplacement(sb,"*");  //将456456之前的字符串追加到sb,再将456456替换为*,并追加到sb
System.out.println(sb.toString());
m.appendTail(sb);  //将前面替换过的内容连接后面未替换过的内容,并放入sb
System.out.println(sb.toString());
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: