首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在regex JAVA中使用Pattern Matcher时,如何获取剩余的不匹配字符串?

在regex JAVA中使用Pattern Matcher时,可以使用find()方法来查找下一个匹配项,并使用start()end()方法来获取匹配项的起始和结束位置。如果想要获取剩余的不匹配字符串,可以使用region()方法来设置匹配的区域范围,然后使用group()方法来获取不匹配的部分。

具体步骤如下:

  1. 创建一个Pattern对象,用于表示正则表达式模式。
  2. 使用Pattern对象的matcher()方法创建一个Matcher对象,用于匹配字符串。
  3. 使用Matcher对象的find()方法查找下一个匹配项。
  4. 如果找到了匹配项,可以使用start()end()方法获取匹配项的起始和结束位置。
  5. 使用region()方法设置匹配的区域范围,将其设置为当前匹配项的结束位置。
  6. 使用group()方法获取不匹配的部分,即剩余的字符串。
  7. 重复步骤3到步骤6,直到没有更多的匹配项。

以下是一个示例代码:

代码语言:txt
复制
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegexExample {
    public static void main(String[] args) {
        String input = "Hello, world! This is a test.";
        String pattern = "\\b\\w+\\b"; // 匹配单词

        Pattern regex = Pattern.compile(pattern);
        Matcher matcher = regex.matcher(input);

        int lastMatchEnd = 0; // 上一个匹配项的结束位置

        while (matcher.find()) {
            int matchStart = matcher.start();
            int matchEnd = matcher.end();

            // 获取不匹配的部分
            String unmatched = input.substring(lastMatchEnd, matchStart);
            System.out.println("Unmatched: " + unmatched);

            lastMatchEnd = matchEnd;
        }

        // 获取最后一个匹配项之后的不匹配部分
        String unmatched = input.substring(lastMatchEnd);
        System.out.println("Unmatched: " + unmatched);
    }
}

输出结果为:

代码语言:txt
复制
Unmatched: 
Unmatched: , 
Unmatched:  world! 
Unmatched:  This 
Unmatched:  is 
Unmatched:  a 
Unmatched:  test.

在上述示例中,我们使用正则表达式模式\b\w+\b来匹配单词。通过循环遍历匹配项,我们获取了每个匹配项之前的不匹配部分,并输出了结果。最后,我们还获取了最后一个匹配项之后的不匹配部分。

请注意,这只是一个简单的示例,实际应用中可能需要根据具体需求进行适当的修改和扩展。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Java魔法堂:深入正则表达式API

matcher(CharSequence input);    2. java.util.regex.Matcher类 :匹配类,用于存储模式实例匹配字符串后所产生结果。        ...:子表达式) ,非捕获分组,该类型分组将不纳入匹配对象group属性,并且无法通过反向引用在表达式后续部分获取该分组内容。通常是配合 | 使用。...子表达式) ,命名分组,该类型分组将纳入匹配对象group属性,并且可以group属性值通过name值来获取该分组值。     [d].  (?...子表达式A) ,零宽负向先行断言(也称为预搜索匹配)。例如匹配字符串"abcd"c和d正则表达式可以是 \w(?!\w{2})   3....例如匹配字符串"abcd"c和d正则表达式可以是 (?<=\w{2})\w [b]. (?<!子表达式A)子表达式B ,零宽负向后行断言(也称为反向搜索匹配)。

1.3K50

java正则表达式http_Java 正则表达式(精华)

英文:Jakob Jenkov 译文:严亮 链接:ifeve.com/java-regex/ Java 提供了功能强大正则表达式API,java.util.regex 包下。...本教程介绍如何使用正则表达式API。 正则表达式 一个正则表达式是一个用于文本搜索文本模式。换句话说,文本搜索出现模式。例如,你可以用正则表达式搜索网页邮箱地址或超链接。...代码只是简单查找字符串 http:// 是否出现。 Java6 关于正则表达式API 本教程介绍了Java6 关于正则表达式API。...Pattern (java.util.regex.Pattern) 类 java.util.regex.Pattern 简称 Pattern, 是Java正则表达式API主要入口,无论何时,需要使用正则表达式...Matcher (java.util.regex.Matcher) java.util.regex.Matcher 类用于匹配一段文本多次出现一个正则表达式,Matcher 也适用于多文本匹配同一个正则表达式

1.5K10
  • Java正则表达式详解

    Java 提供了功能强大正则表达式API,java.util.regex 包下。本教程介绍如何使用正则表达式API。 正则表达式 一个正则表达式是一个用于文本搜索文本模式。...代码只是简单查找字符串 http:// 是否出现。 Java6 关于正则表达式API 本教程介绍了Java6 关于正则表达式API。...Pattern (java.util.regex.Pattern) 类 java.util.regex.Pattern 简称 Pattern, 是Java正则表达式API主要入口,无论何时,需要使用正则表达式...Matcher (java.util.regex.Matcher) java.util.regex.Matcher 类用于匹配一段文本多次出现一个正则表达式,Matcher 也适用于多文本匹配同一个正则表达式...find() + start() + end() find() 方法用于文本查找出现正则表达式,文本是创建Matcher,通过 Pattern.matcher(text) 方法传入

    2.5K00

    优秀攻城师必知正则表达式语法

    Java里面,关于正则有两个核心类,分别是: (1)java.util.regex.Pattern (2)java.util.regex.Matcher Pattern类用于创建和预编译正则表达式,并能够将自身规则与文本进行匹配...上面这些字符,使用时候需要转义,注意在Java语言里面转义写两个反斜杠: \\+ 简单解释一下,两个反斜杠表示是一个反斜杠意思,所以如果要对某些元字符转义需要使用两个反斜杠才可以。...=pattern) 执行正向预测先行搜索子表达式,该表达式匹配处于匹配 pattern 字符串起始点字符串。它是一个非捕获匹配,即不能捕获供以后使用匹配。例如,'Windows (?...pattern) 执行反向预测先行搜索子表达式,该表达式匹配处于匹配 pattern 字符串起始点搜索字符串。它是一个非捕获匹配,即不能捕获供以后使用匹配。例如,'Windows (?!...历史文章: 如何动手撸一个LRU缓存 如何动手撸一个简单LFU缓存 Java里面如何解决进退两难jar包冲突问题? Java基本类型内存分配在栈还是堆 什么是缓存置换算法?

    1.3K30

    恭喜你,Get到一份 正则表达式 食用指南

    Java中正则表达式使用 字符串内置正则 Java 中有四个内置运行正则表达式方法,分别是 matches()、split())、replaceFirst()、replaceAll()。...Java regex使用正则表达式基本步骤 通过正则表达式创建模式对象 Pattern。 通过模式对象 Pattern,根据指定字符串创建匹配对象 Matcher。...模式分组后会在正则表达式创建反向引用。反向引用会保存匹配模式分组字符串片断,这使得我们可以获取使用这个字符串片断。...Java 反斜杠 反斜杠 \ Java 中表示转义字符,这意味着 \ Java 拥有预定义含义。 这里例举两个特别重要用法: 匹配 . 或 { 或 [ 或 ( 或 ?...匹配 \ Java 要写为 \\\\,但对于正则表达式来说就是 \\。

    62410

    22 Java 正则表达式

    第一种情况,表达式 [a-z]* 只匹配字符 c,使得字符 ab 匹配该模式剩余部分;但是贪婪版本[a-z]*+ 将匹配字符 cab,模式剩余部分将无法匹配。...Java 正则表达式类使用语法与 Perl 语言使用语法十分相似,但是并不完全一样。表 1-8 展示Java语法所有结构。...MULTILINE :^ 和 $ 匹配开头和结尾,而不是整个输入开头和结尾。 UNIX_LINES :多行模式匹配 ^ 和 $ ,只有 '\n' 被识别成行终止符。...) 通常,你希望用正则表达式来匹配全部输入,而只是想找出输入中一个或多个匹配字符串。...如果 limit<0,那么这个输入都被分割;如果 limit 为 0,那么坠尾字符串将不会置于返回数组 java.util.regex.Matcher 1.4 * boolean matches

    42310

    根据正则表达式截取字串符,这个办法打败99%程序员

    作为一名程序员,常常会在以下情况下使用函数功能根据正则表达式截取字符串: 1.字符串处理:当需要使用正则表达式匹配和提取字符串特定模式,可以使用该函数。...substringByRegex方法,首先使用Pattern.compile方法创建了一个正则表达式模式对象pattern,该对象由输入正则表达式字符串regex编译而来。...然后,使用pattern对象matcher方法创建了一个匹配器对象matcher,该匹配器用于输入字符串inputString查找与正则表达式匹配部分。...使用matcher对象find方法输入字符串查找匹配正则表达式字符串。如果找到匹配字符串,find方法将返回true,否则返回false。...如果find方法返回true(即找到了匹配字符串),则使用matcher对象group方法获取第一个匹配字符串,并返回该子字符串

    67000

    java正则表达式

    今天我们简单聊聊Java正则表达式~ 正则表达式基础 正则表达式(Regular Expression,简称Regex)是一种强大文本处理工具,它定义了搜索或操作字符串一种逻辑公式。...Java,正则表达式处理是通过java.util.regex.Patternjava.util.regex.Matcher类来实现。...([0-9]{4})$ 这些模式利用了字符类、锚点、可选匹配和分组等正则表达式概念。 语法和用法 Java,可以使用PatternMatcher类来应用正则表达式。...Java正则表达式API Java编程,处理正则表达式主要API位于java.util.regex。...每次调用find()方法,它都会搜索输入字符串下一个匹配项,并返回true。通过调用group()方法,我们可以获取当前匹配字符串

    10610

    (89) 正则表达式 () 计算机程序思维逻辑

    上节介绍了正则表达式语法,本节介绍相关Java API。 正则表达式相关类位于包java.util.regex下,有两个主要类,一个是Pattern,另一个是Matcher。...字符串类String也是一个重要类,我们29节专门介绍过String,其中提到,它有一些方法,接受参数不是普通字符串,而是正则表达式。此外,正则表达式Java是需要先以字符串形式表示。...Java,没有什么特殊语法能直接表示正则表达式,需要用字符串表示,而在字符串,'\'也是一个元字符,为了字符串中表示正则表达式'\',就需要使用两个'\',即'\\',而要匹配'\'本身,就需要四个...编译有一定成本,而且Pattern对象只与正则表达式有关,与要处理具体文本无关,它可以安全地被多线程共享,所以,使用同一个正则表达式处理多个文本,应该尽量重用同一个Pattern对象,避免重复编译...小结 本节介绍了正则表达式相关主要Java API,讨论了如何Java中表示正则表达式,如何利用它实现文本切分、验证、查找和替换,对于替换,我们演示了一个简单模板引擎。

    1.1K70

    详解Java API之正则表达式

    二、Java API对正则表达式支持      Java,对正则表达式支持,主要还是java.util.regex这个包,我们常用是其中PatternMatcher这两个类。...其中Pattern绑定了一个正则表达式,也就是代表了一个规则,Matcher绑定了一个Pattern和一个被处理字符串,我们可以利用Matcher一些方法来完成匹配工作。...下面通过介绍String几个基本方法,了解正则表达式Java基本使用情况。 首先我们看split方法,该方法用于分割字符串,返回一个String数组。...(regex); Matcher m = p.matcher(input); return m.matches(); } 这是一个非常标准对正则表达式处理流程,首先编译(绑定)正则表达式字符串获取...Pattern实例,然后调用Patternmatcher方法获取Matcher实例,接着就可以利用Matcher实例完成大量工作。

    88390

    正则十八式-第二式:控鹤擒龙

    藏扇仙:问号紧加限定尾,即非贪婪 捷特:师傅,这波稳,通过两个限定符进行夹逼 藏扇仙:所以这招名为-控鹤擒龙 二、Java正则 藏扇仙:这是为师看家法宝之一,Java加工机。...│ │ ├── book.txt │ │ └── regx.txt 1.字符流读取文件 为了使用方便,读取文件来解析,由于我们使用字符串,直接用...,过滤擒龙 上面的黄色匹配部位都可以通过代码获取。...Java通过PatternMatcher两类完成 下面这样就可以很轻松地获取文件中所有的书名,无论几十万行,几百万行,通行无阻 private static void regexBook(String...藏扇仙:这招控鹤擒龙,你可要多加练习,提取信息是非常有用

    56120

    一般人不敢动系列之—基于logback日志“规范”和“脱敏”

    3)脱敏: 日志存在特定规则字符串,比如手机号,需要对其进行脱敏处理。...简单来说,你需要将参数传递给Converter,这些参数必须以option方式声明某个字段上,否则没法做。 特别注意,如果option参数包含{、},必须将option参数使用''包括。...maxLength 默认值为2048,即message最大长度超过此值后将会被截取,可配置。 policy 对于regex匹配成功字符串如何处理。...; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; /** *...我门还要避免message处理过程,新建太多字符串,否则会大量消耗内存;处理,尽可能确保主message只有一个,replace不改变message长度,可以避免因为重建String导致一些空间浪费

    5.5K20

    编程思想 之「字符串

    此外,使用split()方法时候,原始字符串与正则表达式匹配部分,最终结果中都不存在了。而且,如果正则表达式不是只使用一次的话,非String对象正则表达式具有更佳性能。...类静态compile方法编译正则表达式字符串生产Pattern对象,如Pattern.compile(regex); 再调用Pattern对象matcher()方法,生成一个Matcher对象; 最后...(regex); // 使用 Matcher 对象方法对字符串进行操作,为了获取三个字母组成单词,可以用查找 find() 方法 Matcher matcher =...如上述所示,演示了如何通过PatternMatcher对象使用正则表达式,其中Pattern对象表示编译后正则表达式,Matcher对象则提供了众多可供正则表达式使用方法。...(regex); // 调用 Pattern 对象 matcher() 方法,获取 Matcher 对象 Matcher matcher = pattern.matcher

    47930

    Java 中文官方教程 2022 版(十一)

    Pattern.CASE_INSENSITIVE 启用不区分大小写匹配。默认情况下,区分大小写匹配假定只有 US-ASCII 字符集中字符被匹配。...(s 是"single-line"模式缩写, Perl 称为这种模式。) Pattern.LITERAL 启用模式字面解析。当指定此标志,指定模式输入字符串被视为一系列字面字符。...由于我们仍在使用PatternMatcher对象,您可以使用 split 来获取任何正则表达式两侧文本。...浏览器 Java 插件软件管理小程序生命周期。 使用 Web 服务器来测试本课程示例。建议使用本地小程序,当 Java 控制面板安全级别设置为高或非常高,本地小程序将被阻止。...有关如何使用此功能更多详细信息,请参见如何使用根窗格。 一个小程序可以扩展java.applet.Applet类,当它不使用 Swing GUI 组件

    7800

    Java正则速成秘籍(一)之招式篇

    又爱又恨正则 正则表达式是一个强大文本匹配工具,但是它规则实在很繁琐,而且理解起来也颇为蛋疼,容易让人望而生畏。 如何学习正则 刚接触正则,我看了一堆正则语义说明,但是仍然不明所以。...概述 JDKjava.util.regex包提供了对正则表达式支持。 java.util.regex有三个核心类: Pattern类:Pattern是一个正则表达式编译表示。...注:需要格外注意一点,Java使用反斜杠"\"必须写成 "\\"。所以本文代码出现形如String regex = "\\$\\{.*?\\}" 其实就是"\$\{.*?...类可以说是java.util.regex核心类必杀技!...上面的例子是想将 ${productName} 替换为 ${product} ,然而replaceAll方法却将传入字符串$当做特殊字符来处理了。结果产生异常。 如何解决这个问题?

    1.1K80

    Java 正则表达式灾难性回溯

    如何避免 在所有下述情况,灾难性回溯只有正则表达式有问题部分后面跟随一个可能失败模式才会发生,从而导致回溯实际发生。...请注意,当执行完全匹配(例如使用 String.matches),正则表达式结尾被视为一个可能失败模式,因为它只有在到达字符串结尾才会成功。...这种情况可能发生在 r 包含可选部分、交替或额外重复使用JDK 9或更高版本,如果重复是贪婪且整个正则表达式包含反向引用,则运行时间会优化为多项式或线性。...使用多次处理,预处理或后处理字符串,或使用多个正则表达式。一个例子是将 str.split("\\s*,\\s*") 替换为 str.split(","),然后第二步修剪字符串空格。...当然,这意味着你将接受比预期更多字符串,但这可以通过使用捕获组来检查可选部分是否匹配,然后它们匹配忽略匹配来处理。例如,正则表达式 x*y 可以替换为 x*(y)?

    11910

    Java正则速成秘籍(一)之招式篇

    又爱又恨正则 正则表达式是一个强大文本匹配工具,但是它规则实在很繁琐,而且理解起来也颇为蛋疼,容易让人望而生畏。 如何学习正则 刚接触正则,我看了一堆正则语义说明,但是仍然不明所以。...java.util.regex有三个核心类: Pattern类:Pattern是一个正则表达式编译表示。 Matcher类:Matcher是对输入字符串进行解释和匹配操作引擎。...注:需要格外注意一点,Java使用反斜杠"\"必须写成 "\\"。所以本文代码出现形如String regex = "\\$\\{.*?\\}" 其实就是"\$\{.*?...类 Matcher类可以说是java.util.regex核心类必杀技!...上面的例子是想将 ${productName} 替换为 ${product} ,然而replaceAll方法却将传入字符串$当做特殊字符来处理了。结果产生异常。 如何解决这个问题?

    95850
    领券