最近学习正则表达式,发现Java中的一些术语与其他地方描述的有所差异。比如Java正则表达式中的“组”概念与《正则表达式必知必会》一书中讲述的“子表达式”其实是一样的,只是表述不同而已。由此也引发了使用JavaAPI时对group(int group)、start(int group)、end(int group)不是太理解。在阅读了关于正则表达式问题:有谁用过Matcher类的group()方法没有之后彻底明白,并写了一个小程序测试。
程序如下:
package cn.mingyuan.regexp.singlecharacter;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class GroupIndexAndStartEndIndexTest {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String str = "Hello,World! in Java.";
Pattern pattern = Pattern.compile("W(or)(ld!)");
Matcher matcher = pattern.matcher(str);
while(matcher.find()){
System.out.println("Group 0:"+matcher.group(0));//得到第0组——整个匹配
System.out.println("Group 1:"+matcher.group(1));//得到第一组匹配——与(or)匹配的
System.out.println("Group 2:"+matcher.group(2));//得到第二组匹配——与(ld!)匹配的,组也就是子表达式
System.out.println("Start 0:"+matcher.start(0)+" End 0:"+matcher.end(0));//总匹配的索引
System.out.println("Start 1:"+matcher.start(1)+" End 1:"+matcher.end(1));//第一组匹配的索引
System.out.println("Start 2:"+matcher.start(2)+" End 2:"+matcher.end(2));//第二组匹配的索引
System.out.println(str.substring(matcher.start(0),matcher.end(1)));//从总匹配开始索引到第1组匹配的结束索引之间子串——Wor
}
}
}
程序的运行结果为:
Group 0:World!
Group 1:or
Group 2:ld!
Start 0:6 End 0:12
Start 1:7 End 1:9
Start 2:9 End 2:12
Wor
总结:其实group(),start(),end()所带的参数i就是正则表达式中的子表达式索引(第几个子表达式),由于刚开始对Java正则表达式中的组的概念不清晰,导致理解困难。当将“组”的概念与“子表达式”对应起来之后,理解matcher的group,start,end就完全没有障碍了。
分享到:
相关推荐
4. **处理匹配结果**:使用`group(int group)`方法获取匹配的子串,或者`start(int group)`和`end(int group)`获取匹配子串的起始和结束位置。 在提供的两个示例类中,可能会展示具体的日志处理代码,包括正则...
Java正则表达式是Java编程语言中用于处理字符串的强大工具,它基于模式匹配的概念,能够高效地进行文本搜索、替换和解析。在Java中,正则表达式主要通过`java.util.regex`包来实现,提供了Pattern和Matcher两个核心...
find 方法用于查找字符串中是否存在匹配正则表达式的子串。例如: ```java while(m.find()) { System.out.println(m.start()+"...."+m.end()); System.out.println("sub:"+str.substring(m.start(),m.end())); ...
Matcher是Pattern的一个关键接口,它提供了多种匹配方法来检查字符串是否符合给定的正则表达式。Matcher的主要方法包括: - boolean matches():尝试将整个输入序列与模式匹配。如果输入序列与整个模式完全匹配,则...
在Java中,正则表达式是通过java.util.regex包提供的类来实现的,主要包括Pattern和Matcher两个核心类。这篇博客将深入探讨正则表达式在Java代码中的应用。 首先,创建一个正则表达式需要使用Pattern类。Pattern类...
`Pattern`类用于编译正则表达式,而`Matcher`类则是用来在特定输入字符串中查找与正则表达式匹配的序列。 1. **Pattern类**: - `Pattern.compile(String regex)`:这是编译正则表达式的基本方法,将字符串转换为`...
Java中的正则表达式是处理字符串的强大工具,它允许我们以一种简洁的方式匹配、查找、替换和解析文本。正则表达式(Regular Expression)是一种模式匹配语言,它由特殊字符和普通字符组成,用于定义一个搜索模式。在...
`StartEnd`类展示了`Matcher.start()`和`Matcher.end()`方法的用法。这些方法返回匹配子串的起始和结束索引,这对于定位匹配的具体位置非常有用。例如,`m1.start()`和`m1.end()`给出了匹配的`re`或`expressing`在...
`Pattern`类用于编译正则表达式,而`Matcher`类则是用来在给定的输入字符串中搜索与正则表达式匹配的序列。 1. **创建Pattern对象**: 首先,我们需要编译正则表达式。这可以通过调用`Pattern.compile(String ...
### Java正则表达式Pattern与Matcher详解 #### 一、Java正则表达式的概述 在Java编程语言中,正则表达式(Regular Expression)是一种强大的文本处理工具,它能够帮助开发者进行复杂的字符串搜索和替换操作。Java...
Java正则表达式是Java编程语言中的一个强大工具,它用于模式匹配和字符串处理,尤其在数据验证、文本检索和替换等方面发挥着重要作用。本教程是专为初学者设计的HTML版,旨在帮助读者快速掌握Java正则表达式的概念和...
在Java中,正则表达式是通过java.util.regex包提供的类和接口来实现的,主要包括Pattern、Matcher和MatchResult。以下是对这些关键概念的详细解释: 1. **Pattern**:Pattern类代表一个预编译的正则表达式。首先,...
`Matcher`类提供了多种方法用于访问匹配结果,如`group()`用于获取匹配的子字符串,`start()`和`end()`用于返回匹配子串在原字符串中的位置。 #### 三、进阶主题 - **反向引用**:使用`\1`、`\2`等表示之前捕获的...
Matcher对象还提供了一系列方法来获取更多信息,如`matches()`, `group()`, `start()`, `end()`等。 ### 3. Groovy中的高级正则表达式用法 - **预编译正则表达式**:使用`Pattern.compile()`方法可以预先编译正则...
Matcher有多个方法,如find()用于查找下一个匹配项,group()返回匹配的子串,start()和end()分别返回匹配子串的起始和结束索引。此外,Matcher还提供了split()方法,用于根据正则表达式分割字符串,以及replaceFirst...
在Java中,`java.util.regex`包提供了处理正则表达式的类,主要包括`Pattern`和`Matcher`。 - **Pattern**:编译后的正则表达式对象,是不可变的。 - **Matcher**:用于执行匹配操作的对象,可以多次复用。 ##### ...