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

标签 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”开头。有人可以指出我哪里出错了。

最佳答案

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

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

否则 .+ 会贪婪地匹配直到找到最后一个 [...]

RegEx Demo

关于java regex - 无法从第一个方括号中检索内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32953969/

相关文章:

java - 将 foursquare http 响应转换为 JSON for java

python - 从字符串的开头和结尾删除非字母字符

java - 正则表达式在除括号外的管道之间分割

regex - 如何匹配 golang 正则表达式中的字符或字符串结尾?

java - 如何刷新 JTable 中的数据 我正在使用 TableModel

java - 使用 printf() 打印变量时打印随机数

java - 正则表达式匹配 17 个大写字符

r - 在单词的字母之间插入空格

java - 将验证码与 Spring Security 集成

java - titledBorder 标题中的图标