Java - 提取 [* ... *] 之间的所有内容

标签 java regex parsing

我有一个如下所示的文本文件:

[* content I want *] 
[ more content ]

我想读取该文件并能够提取我想要的内容。我能做的最好的事情如下,但它会返回

[更多内容]

请注意,我想要的内容更多内容都包含方括号和圆括号,但它们从不包含[**] .

public static String parseFile(String src) throws IOException
{
    String s = "";
    File f = new File(src);
    Scanner sc = new Scanner(f);
    sc.useDelimiter("\\[\\*([^]]+)\\*\\]");
    s= sc.next();
    sc.close();
    return s;
}

最佳答案

以下正则表达式应该有效:

\[\s*\*\s*(.*?)\s*?\*\s*\]

https://regex101.com/r/uC4lH9/3

你可以像这样使用它(Java 8):

import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegexExample {
public static final Pattern PATTERN = Pattern.compile("\\[\\s*\\*\\s*(.*?)\\s*?\\*\\s*\\]");

public static List<String> parse(String fileContent) {
    Matcher matcher = PATTERN.matcher(fileContent);
    List<String> foundData = new ArrayList<>();
    while (matcher.find()) {
        foundData.add(matcher.group(1));
    }
    return foundData;
}

public static void printOutList(List<? extends CharSequence> list) {
    list.forEach(System.out::println);
}

public static void main(String[] args) {
    printOutList(parse("[ this will not match ] [ * YOU WILL BE MATCHED!!!11 * ] [* you as well *] [*you too*]" +
            " [           *              this as well       *] [this * will * not]"));
}
}

输出:

YOU WILL BE MATCHED!!!11
you as well
you too
this as well

你自己看看:https://ideone.com/ldclWA

关于Java - 提取 [* ... *] 之间的所有内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32125736/

相关文章:

java - Spring boot webflux无法解析RestController

c# - 正则表达式获取指定单词后的第一个单词

java - 页面上有两个字符集标签,该采用哪个?

用 Java 解析 JavaScript

java - OpenGL 工件 : where do they come from?

java - 安装 Rhodes 框架时遇到问题

python - Python 中的正则表达式分组

javascript - 城市 FR 格式化箱

java - 如何使段落标签内的 anchor 标签可点击?

java - 如何在 Java EE 6 中保护 REST Web 服务