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 に答える