`
烟的傀儡
  • 浏览: 27669 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

正则表达式中Matcher的group()、start()、end()带参方法解析

阅读更多

  最近学习正则表达式,发现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就完全没有障碍了。正则表达式中Matcher的group()、start()、end()带参方法解析

 

转自:http://blog.csdn.net/telnetor/archive/2010/02/26/5555350.aspx

分享到:
评论

相关推荐

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

    4. **处理匹配结果**:使用`group(int group)`方法获取匹配的子串,或者`start(int group)`和`end(int group)`获取匹配子串的起始和结束位置。 在提供的两个示例类中,可能会展示具体的日志处理代码,包括正则...

    java正则表达式.zip

    Java正则表达式是Java编程语言中用于处理字符串的强大工具,它基于模式匹配的概念,能够高效地进行文本搜索、替换和解析。在Java中,正则表达式主要通过`java.util.regex`包来实现,提供了Pattern和Matcher两个核心...

    Java 使用正则表达式对象实现正则的获取功能

    find 方法用于查找字符串中是否存在匹配正则表达式的子串。例如: ```java while(m.find()) { System.out.println(m.start()+"...."+m.end()); System.out.println("sub:"+str.substring(m.start(),m.end())); ...

    JAVA正则表达式Pattern和Matcher

    Matcher是Pattern的一个关键接口,它提供了多种匹配方法来检查字符串是否符合给定的正则表达式。Matcher的主要方法包括: - boolean matches():尝试将整个输入序列与模式匹配。如果输入序列与整个模式完全匹配,则...

    正则表达式在Java代码中的使用

    在Java中,正则表达式是通过java.util.regex包提供的类来实现的,主要包括Pattern和Matcher两个核心类。这篇博客将深入探讨正则表达式在Java代码中的应用。 首先,创建一个正则表达式需要使用Pattern类。Pattern类...

    java正则表达式截取demo下载即可运行

    `Pattern`类用于编译正则表达式,而`Matcher`类则是用来在特定输入字符串中查找与正则表达式匹配的序列。 1. **Pattern类**: - `Pattern.compile(String regex)`:这是编译正则表达式的基本方法,将字符串转换为`...

    Java中如何使用正则表达式

    Java中的正则表达式是处理字符串的强大工具,它允许我们以一种简洁的方式匹配、查找、替换和解析文本。正则表达式(Regular Expression)是一种模式匹配语言,它由特殊字符和普通字符组成,用于定义一个搜索模式。在...

    正则表达式基本使用.doc

    `StartEnd`类展示了`Matcher.start()`和`Matcher.end()`方法的用法。这些方法返回匹配子串的起始和结束索引,这对于定位匹配的具体位置非常有用。例如,`m1.start()`和`m1.end()`给出了匹配的`re`或`expressing`在...

    java正则表达式教程html版带目录

    Java正则表达式是Java编程语言中的一个强大工具,它用于模式匹配和字符串处理,尤其在数据验证、文本检索和替换等方面发挥着重要作用。本教程是专为初学者设计的HTML版,旨在帮助读者快速掌握Java正则表达式的概念和...

    Java正则表达式简单应用

    `Pattern`类用于编译正则表达式,而`Matcher`类则是用来在给定的输入字符串中搜索与正则表达式匹配的序列。 1. **创建Pattern对象**: 首先,我们需要编译正则表达式。这可以通过调用`Pattern.compile(String ...

    java正则表达式Pattern,Matcher

    Java中的正则表达式功能主要通过`java.util.regex`包来实现,该包提供了两个核心类:`Pattern`和`Matcher`。 #### 二、Pattern类 `Pattern`类代表预编译的正则表达式。它提供了静态方法`compile()`用于创建`...

    正则表达式 正则表达式

    在Java中,正则表达式是通过java.util.regex包提供的类和接口来实现的,主要包括Pattern、Matcher和MatchResult。以下是对这些关键概念的详细解释: 1. **Pattern**:Pattern类代表一个预编译的正则表达式。首先,...

    Java正则表达式详解.pdf

    `Matcher`类提供了多种方法用于访问匹配结果,如`group()`用于获取匹配的子字符串,`start()`和`end()`用于返回匹配子串在原字符串中的位置。 #### 三、进阶主题 - **反向引用**:使用`\1`、`\2`等表示之前捕获的...

    [Groovy入门]第四讲.数据搜索功能与正则表达式

    Matcher对象还提供了一系列方法来获取更多信息,如`matches()`, `group()`, `start()`, `end()`等。 ### 3. Groovy中的高级正则表达式用法 - **预编译正则表达式**:使用`Pattern.compile()`方法可以预先编译正则...

    Java正则表达式学习教程

    Matcher有多个方法,如find()用于查找下一个匹配项,group()返回匹配的子串,start()和end()分别返回匹配子串的起始和结束索引。此外,Matcher还提供了split()方法,用于根据正则表达式分割字符串,以及replaceFirst...

    java正则表达式替换字符串

    在Java中,`java.util.regex`包提供了处理正则表达式的类,主要包括`Pattern`和`Matcher`。 - **Pattern**:编译后的正则表达式对象,是不可变的。 - **Matcher**:用于执行匹配操作的对象,可以多次复用。 ##### ...

Global site tag (gtag.js) - Google Analytics