首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Java匹配器甚至没有条件在循环中找到()

Java匹配器甚至没有条件在循环中找到()
EN

Stack Overflow用户
提问于 2019-09-04 17:42:32
回答 1查看 787关注 0票数 4

Introduction

我想在Java中使用RegEx提取字符串中的子字符串。为此,让我们使用模式和Matcher类来正确地完成它。

代码语言:javascript
运行
复制
package stringlearning;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 *
 * @author Jonathan
 */
public class StringLearning {

    //Example String
    public static String line = "This is the (first|second|third) choice.";


    public static void main(String[] args) 
    {

        //String is right, right?
        System.out.println("Line is: " + line);

        //How to use RegEx in Java properly
        Pattern pattern = Pattern.compile("\\(([^\\)]+)\\)", Pattern.DOTALL);
        Matcher matcher = pattern.matcher(line);

        //While we find, keep looping
        while(matcher.find())
        {
            //What we foud out?
            System.out.println(matcher.matches());
            System.out.println(matcher.groupCount());
            System.out.println(matcher.group(1));
        }



    }

}

问题

我还是不明白它为什么找不到任何东西。正则表达式是在RegEx上创建的,并在那里正常工作(不要忘记转义!'/')

我想知道我错过了什么与不匹配

Notes

  • 艾德: NetBeans
  • Java版本是1.8.0_221
EN

Stack Overflow用户

回答已采纳

发布于 2019-09-04 17:49:25

while循环中的这一行出现了问题:

代码语言:javascript
运行
复制
System.out.println(matcher.matches());

在这里,matches()尝试将整个区域与模式匹配。

如果匹配成功,则可以通过startendgroup方法获得更多信息。

由于regex与整个输入不匹配,所以matches()返回false,您将得到代码调用.group(1)java.lang.IllegalStateException

要修复,只需注释掉System.out.println(matcher.matches());行并重新运行代码。

顺便说一句,您可以使用这个较短的正则表达式:

代码语言:javascript
运行
复制
final Pattern pattern = Pattern.compile("\\(([^)]+)\\)");

因为没有必要在字符类中转义),所以DOTALL在这里是多余的,因为您在正则表达式中的任何地方都没有使用DOT。

票数 4
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57793416

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档