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

我的Java正则表达式从不匹配,尽管它总是通过在线Java正则表达式检查器传递,java,regex,Java,Regex,我的正则表达式:(VSHORT:(?[^,]+)*,*(SHORT:(?[^,]+)*,*(MED:(?[^,]+)*,*(LONG:(?[^,]+)* 示例文本:VSHORT:Ar,SHORT:Arsnl Java代码: Pattern.compile("(VSHORT:(?<VSHORT>[^,]+))*,*(SHORT:(?<SHORT>[^,]+))*,*(MED:(?<MED>[^,]+))*,*(LONG:(?<LONG>[^,]+)

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

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

Java代码:

 Pattern.compile("(VSHORT:(?<VSHORT>[^,]+))*,*(SHORT:(?<SHORT>[^,]+))*,*(MED:(?<MED>[^,]+))*,*(LONG:(?<LONG>[^,]+))*")
        .matcher("VSHORT:Ar,SHORT:Arsnl")
        .group("SHORT");
我尝试了几个在线正则表达式测试仪,但总是通过

有人能帮忙吗?有什么问题吗?

您必须这样调用方法:

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"));
}


注意:如果您等待更多结果,您必须使用
,而
循环以获得所有匹配结果。

非常感谢您,它工作得很好。连续两次投反对票这很奇怪,您能解释一下吗?我的回答错了吗?我没有投反对票。我的理由是,这是因为在重复问题的情况下,最好将它们标记为重复问题,而不是回答它们。如果您认为原始问题下的答案不足,您可以始终在那里添加答案。要学习的课程:通过搜索引擎找到好答案的速度通常比通过在堆栈溢出上发布新问题更快。所以先试试搜索引擎。
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