这一章节我们来讨论一下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正则表达式是编程语言Java中用于处理文本模式匹配和替换的重要工具。它基于一套特殊的语法,允许程序员高效地检查字符串是否符合特定的模式,或者根据这些模式进行字符串的替换和提取。以下是对Java正则表达式...
Java正则表达式是Java编程语言中的一个强大工具,它用于处理字符串,进行模式匹配和文本搜索与替换。正则表达式(Regular Expression)是一种特殊的字符序列,可以用来定义一个字符串模式,帮助开发者在大量文本中...
Java中的正则表达式是处理字符串的强大工具,它允许我们高效地进行文本匹配、查找、替换和分割等操作。在本教程中,我们将深入探讨Java中的正则表达式及其使用方法。 首先,让我们理解什么是正则表达式。正则表达式...
在Java中,正则表达式主要通过`java.util.regex`包来实现,提供了Pattern和Matcher两个核心类。 **1. Pattern类** Pattern类是Java正则表达式的起点,它将一个正则表达式编译成一个模式对象。这个编译过程可以优化...
在Java中,正则表达式的使用主要依赖于`java.util.regex`包中的类,如`Pattern`和`Matcher`。 首先,我们来看`Pattern`类。这个类是正则表达式的模板,负责编译和存储正则表达式。一旦正则表达式被编译为`Pattern`...
Java中的`Pattern`和`Matcher`类用于处理正则表达式。 - `Pattern.compile(regex)`编译正则表达式为模式对象,`Matcher`对象通过`Pattern`对象的`matcher(String input)`方法与输入字符串关联。 - 常用的正则...
我们提供了一系列的Java正则表达式技巧大全,包括《Java正则表达式技巧大全》、《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧汇总》和《Java缓存操作技巧汇总》等系列文章。...
### Java中的正则表达式:分组引用介绍 #### 概述 正则表达式是计算机科学中一种非常强大的文本处理工具,在Java等编程语言中广泛应用于字符串匹配、搜索替换等场景。当需要对正则表达式的部分结果进行进一步处理...
Java中的正则表达式主要通过`java.util.regex`包来实现,核心类有`Pattern`和`Matcher`。`Pattern`是编译正则表达式的对象,编译后可以多次使用。`Matcher`对象是实际执行匹配操作的对象,它与输入字符串关联,并...
总的来说,这个案例可能展示了如何使用Java和正则表达式来解析SQL语句的简单部分,但要完全解析SQL语法,可能还需要结合其他解析技术,如词法分析器(Lexer)、语法分析器(Parser)或者使用现成的SQL解析库。...
Java中的正则表达式主要通过`java.util.regex`包中的类来实现,如`Pattern`和`Matcher`。 在日志处理中,我们通常需要完成以下任务: 1. **过滤日志级别**:日志通常包含不同的级别,如DEBUG、INFO、WARN、ERROR等...
Java正则表达式是Java语言中用于处理字符串的强大工具,它允许程序员进行复杂的字符串匹配、查找和替换操作。正则表达式(Regular Expression)是一种模式匹配语言,通过特定的语法来描述字符串的模式,用于在文本中...
在Java中,正则表达式相关的操作主要集中在java.util.regex包中,主要包括两个类:Pattern类与Matcher类。Pattern类用于编译正则表达式模式,而Matcher类则用于对输入字符串进行模式匹配。 Matcher类的group方法是...
接着,定义了一个名为`SocialSecurityNumberValidator`的类,在主方法中使用`Pattern.compile`编译正则表达式,并使用`matcher.matches`来检查字符串是否与给定的模式匹配。 通过上述知识点的学习,读者可以了解到...
Java提供了`java.util.regex`包,通过`Pattern`和`Matcher`类支持正则表达式。以下是如何在Java中验证电话号码的一个例子: ```java import java.util.regex.Pattern; import java.util.regex.Matcher; String...
### JAVA正则表达式——Pattern和Matcher详解 #### 一、引言 随着JDK 1.4的发布,Java终于内置了自己的正则表达式API,这对于Java开发者来说无疑是个福音,意味着不再需要依赖第三方库就能高效地处理文本数据。Java...
在Java编程语言中,处理字符串和正则表达式是一项常见的任务。正则表达式是一种强大的文本模式匹配工具,可以用于搜索、替换或者提取符合特定规则的字符串。在本篇文章中,我们将深入探讨如何利用Java中的Xeger和...
Java提供了强大的正则表达式支持,主要通过`java.util.regex`包中的`Pattern`和`Matcher`类来实现。`Pattern`类用于编译正则表达式字符串,而`Matcher`类用于执行与字符串的匹配操作。 #### 三、身份证号码的格式...
Pattern类是正则表达式的编译表示形式,它将正则表达式编译成一个模式,使其可以被Matcher类使用。Matcher类是负责进行匹配的类,它将字符串与模式进行比较,以确定是否匹配。 在这个示例中,我们使用 Pattern....
在Java中,主要通过Pattern、Matcher和Pattern类来操作正则表达式。 1. **Pattern类**:这是正则表达式的核心,用于编译正则表达式并创建模式对象。一旦编译完成,该模式可以多次使用,提高了效率。例如: ```java...