我正在使用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\\{(.*)\\})");
我想提取(。*)组但结果不是我的预期 有没有人对更好的模式有任何想法?
答案 0 :(得分: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
需要正确处理换行符,其他应该是不言自明的。
答案 1 :(得分:0)
也许你有空白,你不考虑 试试这个:
"SECTIONS\\s*\\{(.*)\\}"
请注意,我还从模式中删除了外部组(我没有看到它的原因) 在我的例子中,匹配后,使用组1 请注意,这只有在您进行贪婪匹配时才会起作用(默认情况下就是这种情况)。