1

我正在使用 Java 中的 Pattern 和 Matcher 类来解析链接文件脚本。我需要的文本在 SECTIONS 部分:

SECTIONS
    {
        .text : {} > FAST_MEM /* Link all .text sections into ROM */
        .intvecs : {} > 0x0 /* Link interrupt vectors at 0x0 */
        .data : /* Link .data sections */
        {
            tables.obj(.data)
            . = 0x400; /* Create hole at end of block */
        } = 0xFF00FF00 > EEPROM /* Fill and link into EEPROM */
        ctrl_vars: /* Create new ctrl_vars section */
        {
            ctrl.obj(.bss)
        } = 0x00000100 > SLOW_MEM /* Fill with 0x100 and link into RAM */
        .bss : {} > SLOW_MEM /* Link remaining .bss sections into RAM */
    }

现在我正在使用

Pattern SectPattern = Pattern.compile("(SECTIONS\\{(.*)\\})");

我想提取 (.*) 组,但结果不是我所期望的 有人对更好的模式有任何想法吗?

4

2 回答 2

1

这将匹配并打印 SECTIONS{}. 中的内容:

Pattern pattern = Pattern.compile("SECTIONS.*?\\{(.*)\\}", Pattern.DOTALL);
Matcher matcher = pattern.matcher(sample);
matcher.find();

System.out.println(matcher.group(1));

sample你的图案样本在哪里。Pattern.DOTALL需要正确处理换行符,其他应该是不言自明的。

于 2012-06-17T08:03:40.997 回答
0

也许你有你不考虑的空白。
试试这个:

"SECTIONS\\s*\\{(.*)\\}"

请注意,我还从模式中删除了外部组(我没有看到它的原因)。
在我的示例中,匹配后,使用组 1。
请注意,这仅在您进行贪婪匹配时才有效(默认情况下是这种情况)。

于 2012-06-17T08:00:01.593 回答