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

这一章节我们来讨论一下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.w\s+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\n"
				+ "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。

这一章节就到这里,谢谢。

-----------------------------------

目录

时间: 2024-10-13 16:21:19

从头认识java-11.4 正则表达式(3)-Pattern和Matcher的相关文章

Java中正则表达式以及Pattern和Matcher类

正则表达式  正则表达式就是正确规则的表达式,是指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串,就是一种规则的应用. 规则字符在java.util.regex Pattern类中字符 x 字符 x.举例:'a’表示字符a\ 反斜线字符.\n 新行(换行)符 (’\u000A’)\r 回车符 (’\u000D’)字符类 [abc] a.b 或 c(简单类)[^abc] 任何字符,除了 a.b 或 c(否定)[a-zA-Z] a到 z 或 A到 Z,两头的字母包括在内(范围)[0-

Java笔记:正则表达式

一.基础知识 正则表达式是描述字符序列的一串字符.这种通用的描述被称为模式,可用于在其他字符序列中查找匹配.Java的正则表达式由Pattern和Matcher组成,Pattern用于定义正则表达式,Matcher用于在其他序列中匹配模式. 二.语法 正则表达式由常规字符.字符类.通配符及量词构成. 常规字符根据自身进行匹配. 字符类是一组字符,通过在方括号之间放置字符可指定字符类. 通配符可以匹配任意字符. 量词决定表达式将被匹配的次数. ^ 匹配输入字符串的开始位置 $ 匹配输入字符串的结束

JAVA中的正则表达式简介

正则表达式 作用:验证某个字符串是否符合某种规则 代码: //1.正则表达式验证的规则 String reg = "正则表达式": //Pattern,Matcher在java.util包中 //2.编译正则表达式规则 Pattern pattern = Pattern.compile(reg); //3.规则和字符串进行验证比较 Matcher m = pattern.matcher("比较的字符串"); //4.验证 //.matches()/全匹配..fing

Java基础知识强化78:正则表达式之获取功能(Pattern 和 Matcher类的使用)

1. 获取功能: Pattern 和 Matcher类结合使用 2. 使用案例: 1 package cn.itcast_05; 2 3 import java.util.regex.Matcher; 4 import java.util.regex.Pattern; 5 6 /* 7 * 获取功能 8 * Pattern和Matcher类的使用 9 * 10 * 模式和匹配器的基本使用顺序 11 */ 12 public class RegexDemo { 13 public static v

JAVA正则表达式:Pattern类与Matcher类详解(转)

java.util.regex是一个用正则表达式所订制的模式来对字符串进行匹配工作的类库包.它包括两个类:Pattern和Matcher Pattern 一个Pattern是一个正则表达式经编译后的表现模式. Matcher 一个Matcher对象是一个状态机器,它依据Pattern对象做为匹配模式对字符串展开匹配检查. 首先一个Pattern实例订制了一个所用语法与PERL的类似的正则表达式经编译后的模式,然后一个Matcher实例在这个给定的Pattern实例的模式控制下进行字符串的匹配工作

Java正则表达式Pattern和Matcher详解

java.util.regex是一个用正则表达式所订制的模式来对字符串进行匹配工作的类库包. 1.简介:  java.util.regex是一个用正则表达式所订制的模式来对字符串进行匹配工作的类库包. 它包括两个类:Pattern和Matcher . Pattern: 一个Pattern是一个正则表达式经编译后的表现模式. Matcher: 一个Matcher对象是一个状态机器,它依据Pattern对象做为匹配模式对字符串展开匹配检查. 首先一个Pattern实例订制了一个所用语法与PERL的类

JAVA正则表达式:Pattern类与Matcher类详解

java.util.regex是一个用正则表达式所订制的模式来对字符串进行匹配工作的类库包.它包括两个类:Pattern和Matcher Pattern 一个Pattern是一个正则表达式经编译后的表现模式. Matcher 一个Matcher对象是一个状态机器,它依据Pattern对象做为匹配模式对字符串展开匹配检查. 首先一个Pattern实例订制了一个所用语法与PERL的类似的正则表达式经编译后的模式,然后一个Matcher实例在这个给定的Pattern实例的模式控制下进行字符串的匹配工作

JAVA正则表达式 Pattern和Matcher

java.util.regex是一个用正则表达式所订制的模式来对字符串进行匹配工作的类库包. 1.简介:  java.util.regex是一个用正则表达式所订制的模式来对字符串进行匹配工作的类库包. 它包括两个类:Pattern和Matcher . Pattern: 一个Pattern是一个正则表达式经编译后的表现模式. Matcher: 一个Matcher对象是一个状态机器,它依据Pattern对象做为匹配模式对字符串展开匹配检查. 首先一个Pattern实例订制了一个所用语法与PERL的类

文字效果和表情图片:JAVA正则表达式 Pattern和Matcher、SpannableString与SpannableStringBuilder

在TextView和EditText加入表情或者设置文字效果可以使用: JAVA正则表达式 Pattern和Matcher SpannableString与SpannableStringBuilder