java regex - 无法从第一个方括号中检索内容

时间:2015-10-05 17:01:44

标签: java regex

我对正则表达式的东西很新。我有这个要求在第一个方括号中拾取内容。
例如如果我有字符串如" PORT-OTEF_RA2 / 6 [Eh0001 / 001-06] [忽略,测试端口]",
我需要结果为" Eh0001 / 001-06"。

我正在使用以下正则表达式。

Pattern pattern = 
            Pattern.compile("^PORT.+\\[(.*?)\\]");

    Matcher matcher = 
            pattern.matcher("PORT-OTEF_RA2/6 [Eh0001/001-06] [ignore, test port]");

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

但我总是得到第二个方括号的内容。
但是,如果我将正则表达式作为

Pattern.compile("\\[(.*?)\\]");

我得到了必要的答案。但我需要确保字符串以" PORT"开头。有人可以点我出错的地方。

1 个答案:

答案 0 :(得分:4)

PORT之后使用非贪婪的正则表达式:

^PORT.+?\\[(.*?)\\]

否则.+会贪婪并匹配,直到找到最后[...]

RegEx Demo