`
李灵晖-raylee
  • 浏览: 135668 次
博客专栏
Group-logo
从头认识java
浏览量:0
文章分类
社区版块
存档分类
最新评论

从头认识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。


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

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

目录



分享到:
评论

相关推荐

    java-regex正则表达式

    Java正则表达式是编程语言Java中用于处理文本模式匹配和替换的重要工具。它基于一套特殊的语法,允许程序员高效地检查字符串是否符合特定的模式,或者根据这些模式进行字符串的替换和提取。以下是对Java正则表达式...

    Java-Java正则表达式教程

    Java正则表达式是Java编程语言中的一个强大工具,它用于处理字符串,进行模式匹配和文本搜索与替换。正则表达式(Regular Expression)是一种特殊的字符序列,可以用来定义一个字符串模式,帮助开发者在大量文本中...

    java--正则表达式教程

    Java中的正则表达式是处理字符串的强大工具,它允许我们高效地进行文本匹配、查找、替换和分割等操作。在本教程中,我们将深入探讨Java中的正则表达式及其使用方法。 首先,让我们理解什么是正则表达式。正则表达式...

    java正则表达式.zip

    在Java中,正则表达式主要通过`java.util.regex`包来实现,提供了Pattern和Matcher两个核心类。 **1. Pattern类** Pattern类是Java正则表达式的起点,它将一个正则表达式编译成一个模式对象。这个编译过程可以优化...

    java正则表达式匹配工具

    在Java中,正则表达式的使用主要依赖于`java.util.regex`包中的类,如`Pattern`和`Matcher`。 首先,我们来看`Pattern`类。这个类是正则表达式的模板,负责编译和存储正则表达式。一旦正则表达式被编译为`Pattern`...

    java 字符串 正则表达式 详细实例代码

    Java中的`Pattern`和`Matcher`类用于处理正则表达式。 - `Pattern.compile(regex)`编译正则表达式为模式对象,`Matcher`对象通过`Pattern`对象的`matcher(String input)`方法与输入字符串关联。 - 常用的正则...

    Java使用正则表达式提取XML节点内容的方法示例

    我们提供了一系列的Java正则表达式技巧大全,包括《Java正则表达式技巧大全》、《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧汇总》和《Java缓存操作技巧汇总》等系列文章。...

    java-正则表达式-分组引用介绍

    ### Java中的正则表达式:分组引用介绍 #### 概述 正则表达式是计算机科学中一种非常强大的文本处理工具,在Java等编程语言中广泛应用于字符串匹配、搜索替换等场景。当需要对正则表达式的部分结果进行进一步处理...

    JAVA正则表达式大全

    Java中的正则表达式主要通过`java.util.regex`包来实现,核心类有`Pattern`和`Matcher`。`Pattern`是编译正则表达式的对象,编译后可以多次使用。`Matcher`对象是实际执行匹配操作的对象,它与输入字符串关联,并...

    Java源代码案例 - 使用正则表达式解析sql语法树.zip

    总的来说,这个案例可能展示了如何使用Java和正则表达式来解析SQL语句的简单部分,但要完全解析SQL语法,可能还需要结合其他解析技术,如词法分析器(Lexer)、语法分析器(Parser)或者使用现成的SQL解析库。...

    使用Java正则表达式分析处理日志

    Java中的正则表达式主要通过`java.util.regex`包中的类来实现,如`Pattern`和`Matcher`。 在日志处理中,我们通常需要完成以下任务: 1. **过滤日志级别**:日志通常包含不同的级别,如DEBUG、INFO、WARN、ERROR等...

    Java正则表达式 Java 正则表达式

    Java正则表达式是Java语言中用于处理字符串的强大工具,它允许程序员进行复杂的字符串匹配、查找和替换操作。正则表达式(Regular Expression)是一种模式匹配语言,通过特定的语法来描述字符串的模式,用于在文本中...

    详解正则表达式Matcher类中group方法

    在Java中,正则表达式相关的操作主要集中在java.util.regex包中,主要包括两个类:Pattern类与Matcher类。Pattern类用于编译正则表达式模式,而Matcher类则用于对输入字符串进行模式匹配。 Matcher类的group方法是...

    常用java正则表达式

    接着,定义了一个名为`SocialSecurityNumberValidator`的类,在主方法中使用`Pattern.compile`编译正则表达式,并使用`matcher.matches`来检查字符串是否与给定的模式匹配。 通过上述知识点的学习,读者可以了解到...

    常用正则表达式HTML,JAVA合集

    Java提供了`java.util.regex`包,通过`Pattern`和`Matcher`类支持正则表达式。以下是如何在Java中验证电话号码的一个例子: ```java import java.util.regex.Pattern; import java.util.regex.Matcher; String...

    JAVA正则表达式--Pattern和Matcher

    ### JAVA正则表达式——Pattern和Matcher详解 #### 一、引言 随着JDK 1.4的发布,Java终于内置了自己的正则表达式API,这对于Java开发者来说无疑是个福音,意味着不再需要依赖第三方库就能高效地处理文本数据。Java...

    Java根据正则表达式生成字符串—Xeger,automaton

    在Java编程语言中,处理字符串和正则表达式是一项常见的任务。正则表达式是一种强大的文本模式匹配工具,可以用于搜索、替换或者提取符合特定规则的字符串。在本篇文章中,我们将深入探讨如何利用Java中的Xeger和...

    使用Java正则表达式实现一个简单的身份证号码验证

    Java提供了强大的正则表达式支持,主要通过`java.util.regex`包中的`Pattern`和`Matcher`类来实现。`Pattern`类用于编译正则表达式字符串,而`Matcher`类用于执行与字符串的匹配操作。 #### 三、身份证号码的格式...

    java正则表达式验证IP地址

    Pattern类是正则表达式的编译表示形式,它将正则表达式编译成一个模式,使其可以被Matcher类使用。Matcher类是负责进行匹配的类,它将字符串与模式进行比较,以确定是否匹配。 在这个示例中,我们使用 Pattern....

    java 正则表达式应用jar包 regex-smart.jar

    在Java中,主要通过Pattern、Matcher和Pattern类来操作正则表达式。 1. **Pattern类**:这是正则表达式的核心,用于编译正则表达式并创建模式对象。一旦编译完成,该模式可以多次使用,提高了效率。例如: ```java...

Global site tag (gtag.js) - Google Analytics