从头认识java-11.4 正则表达式(3)-Pattern和Matche

页面导航:首页 > 软件编程 > Java编程 > 从头认识java-11.4 正则表达式(3)-Pattern和Matche

从头认识java-11.4 正则表达式(3)-Pattern和Matche

来源: 作者: 时间:2016-01-21 09:39 【

这一章节我们来讨论一下Pattern和Matcher。之前我们都是简单的使用正则表达式来匹配字符串,其实java里面提供了强大的正则匹配类,我们下面将以几个例子来说明。package com ray ch11;impo

这一章节我们来讨论一下Pattern和Matcher。

之前我们都是简单的使用正则表达式来匹配字符串,其实java里面提供了强大的正则匹配类,我们下面将以几个例子来说明。

 

package com.ray.ch11;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Test {

	public static void main(String[] args) {
		String testStr = abc;
		String[] regulars = { a, abc, //d,a? };
		System.out.println(input: + testStr);
		for (String item : regulars) {
			Pattern pattern = Pattern.compile(item);
			Matcher matcher = pattern.matcher(testStr);
			while (matcher.find()) {
				System.out.println(regular: + item +  start:
						+ matcher.start() +  end: + matcher.end());
			}
		}
	}
}

输出:

 

input:abc
regular:a start:0 end:1
regular:abc start:0 end:3
regular:a? start:0 end:1
regular:a? start:1 end:1
regular:a? start:2 end:2
regular:a? start:3 end:3

 

从上面的输出可以看到,我们不但可以得到是否匹配的结果,而且通过matcher,我们可以得到很多其他的信息,例如上面的在那个位置匹配,在哪个位置终结。

 

我们下面改变一下输入,然后再改变一下规则看看另外一个例子:

 

package com.ray.ch11;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Test {

	public static void main(String[] args) {
		String testStr = java now has regular expression;
		String[] regulars = { ^java, \Breg.*, n.w\s+h(a|i)s, s?,
				s+, s*, s{4}, s{1}, s{1,3} };
		System.out.println(input: + testStr);
		for (String item : regulars) {
			Pattern pattern = Pattern.compile(item);
			Matcher matcher = pattern.matcher(testStr);
			while (matcher.find()) {
				System.out.println(regular: + item +  start:
						+ matcher.start() +  end: + matcher.end());
			}
		}
	}
}

输出:

 

input:java now has regular expression
regular:^java start:0 end:4
regular:n.ws+h(a|i)s start:5 end:12
regular:s? start:0 end:0
regular:s? start:1 end:1
regular:s? start:2 end:2
regular:s? start:3 end:3
regular:s? start:4 end:4
regular:s? start:5 end:5
regular:s? start:6 end:6
regular:s? start:7 end:7
regular:s? start:8 end:8
regular:s? start:9 end:9
regular:s? start:10 end:10
regular:s? start:11 end:12
regular:s? start:12 end:12
regular:s? start:13 end:13
regular:s? start:14 end:14
regular:s? start:15 end:15
regular:s? start:16 end:16
regular:s? start:17 end:17
regular:s? start:18 end:18
regular:s? start:19 end:19
regular:s? start:20 end:20
regular:s? start:21 end:21
regular:s? start:22 end:22
regular:s? start:23 end:23
regular:s? start:24 end:24
regular:s? start:25 end:25
regular:s? start:26 end:27
regular:s? start:27 end:28
regular:s? start:28 end:28
regular:s? start:29 end:29
regular:s? start:30 end:30
regular:s? start:31 end:31
regular:s+ start:11 end:12
regular:s+ start:26 end:28
regular:s* start:0 end:0
regular:s* start:1 end:1
regular:s* start:2 end:2
regular:s* start:3 end:3
regular:s* start:4 end:4
regular:s* start:5 end:5
regular:s* start:6 end:6
regular:s* start:7 end:7
regular:s* start:8 end:8
regular:s* start:9 end:9
regular:s* start:10 end:10
regular:s* start:11 end:12
regular:s* start:12 end:12
regular:s* start:13 end:13
regular:s* start:14 end:14
regular:s* start:15 end:15
regular:s* start:16 end:16
regular:s* start:17 end:17
regular:s* start:18 end:18
regular:s* start:19 end:19
regular:s* start:20 end:20
regular:s* start:21 end:21
regular:s* start:22 end:22
regular:s* start:23 end:23
regular:s* start:24 end:24
regular:s* start:25 end:25
regular:s* start:26 end:28
regular:s* start:28 end:28
regular:s* start:29 end:29
regular:s* start:30 end:30
regular:s* start:31 end:31
regular:s{1} start:11 end:12
regular:s{1} start:26 end:27
regular:s{1} start:27 end:28
regular:s{1,3} start:11 end:12
regular:s{1,3} start:26 end:28

 

解释:

(1)上面的find()函数就像迭代器一样,迭代字符串里面每一个字符。而且find(int)里面还可以放置参数,来决定从第几个位置开始迭代。

(2)上面的start()和end()返回匹配的开始和结束的位置

 

除了上面的特性,我们还可以在pattern里面加上参数来限定匹配。

 

package com.ray.ch11;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Test {

	public static void main(String[] args) {
		String testStr = java now has regular expression

				+ JAVA now has regular expression;
		String[] regulars = { ^java };
		System.out.println(input: + testStr);
		for (String item : regulars) {
			Pattern pattern = Pattern.compile(item, Pattern.CASE_INSENSITIVE
					| Pattern.MULTILINE);
			Matcher matcher = pattern.matcher(testStr);
			while (matcher.find()) {
				System.out.println(regular: + item +  start:
						+ matcher.start() +  end: + matcher.end() +  group:
						+ matcher.group());
			}
		}
	}
}


 

输出:

input:java now has regular expression
JAVA now has regular expression
regular:^java start:0 end:4 group:java
regular:^java start:32 end:36 group:JAVA

 

总结:这一章节主要举例讲述了Pattern和Matcher。

 

 

 

Tags:

文章评论

最 近 更 新
热 点 排 行
Js与CSS工具
代码转换工具

<