java - 我的 Java 正则表达式从不匹配,尽管它总是通过在线 java 正则表达式检查器

标签 java regex

我的正则表达式:(VSHORT:(?<VSHORT>[^,]+))*,*(SHORT:(?<SHORT>[^,]+))*,*(MED:(?<MED>[^,]+))*,*(LONG:(?<LONG>[^,]+))*

示例文本:VSHORT:Ar,SHORT:Arsnl

Java 代码:

 Pattern.compile("(VSHORT:(?<VSHORT>[^,]+))*,*(SHORT:(?<SHORT>[^,]+))*,*(MED:(?<MED>[^,]+))*,*(LONG:(?<LONG>[^,]+))*")
        .matcher("VSHORT:Ar,SHORT:Arsnl")
        .group("SHORT");

异常(exception):

java.lang.IllegalStateException: No match found
    at java.util.regex.Matcher.group(Matcher.java:536)

我尝试了几个在线正则表达式测试器,例如 https://www.freeformatter.com/java-regex-tester.html#ad-output并且总是过去。

有人可以帮忙解决一下问题吗?

最佳答案

您必须调用Matcher::find像这样的方法:

Matcher matcher = Pattern.compile("(VSHORT:(?<VSHORT>[^,]+))*,*(SHORT:(?<SHORT>[^,]+))*,*(MED:(?<MED>[^,]+))*,*(LONG:(?<LONG>[^,]+))*")
        .matcher("VSHORT:Ar,SHORT:Arsnl");

if (matcher.find()) {
    System.out.println(matcher.group("SHORT"));
}

输出

Arsnl
<小时/>

注意:如果您等待更多结果,则必须使用 while 循环来获取所有匹配结果。

关于java - 我的 Java 正则表达式从不匹配,尽管它总是通过在线 java 正则表达式检查器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51224296/

相关文章:

java.util.regex

java - 到底 (args.length>0) 是什么意思?

javascript - 正则表达式:方括号之间的有限符号

php - 如何编写正则表达式从这些 URL 中提取数字?

c++ - 如何编写正则表达式以匹配以下数字格式?

java - requestDispatcher.forward() 不打开新的html页面

java - 无法在 Rally Rest Toolkit for Java 中读取父项目的所有子项目用户故事

java - JUnit 断言抛出中的可执行文件会发生什么情况?

java - 我应该如何使用mockito作为对象内部的对象,然后使用值

Java:从字符串中删除数字