我的正则表达式:(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/