0

以下に示すように、タグ \begin{name} と \start{name} の間のテキストを除くすべてに一致する Java RegExp が必要です (タグはネストできます)。

\start{A}
  im inside
\end{A}

im outside

\start{B}
  \start{B1}
    im inside
  \end{B1}
  im inside
\end{B}

im outside

この場合、式はすべての 'im outside' 部分を無視する必要があります。誰でも私を助けることができますか?前もって感謝します!

4

1 に答える 1

0

何かのようなもの :

"\\\\start\{([a-zA-Z_][a-zA-Z_0-9]*)\}(.*?)\\\\end\{$1\}"

DOTALL フラグを使用して、改行を取得できるようにします。中はグループ2です。

これは実際には正規表現を使用して完了することはできません。(開始タグに一致する場合は、ルール全体に再帰的に飛び込む必要がありますが、正規表現では不可能です)。外側のタグの弱点もその中にあり、最初の終了タグが一致します。

このために、タグを次のように一致させることができます:

"\\\\start\{([a-zA-Z_][a-zA-Z_0-9]*)\}"

そして、タグ名をグループ 1 として取得します。そして、現在どのタグの中にいるのかをリストに保存し始めます。次に、終了タグを次のように一致させます

"\\\\end\{([a-zA-Z_][a-zA-Z_0-9]*)\}"

また、タグが一致していることを確認しながら、一致するタグ間のすべてを収集します。

タグ名が標準の識別子名よりも広い場合は、[a-zA-Z_][a-zA-Z_0-9]*それに応じて変更できます。

ファイルを解析している場合は、このアプローチが必要です

于 2013-11-05T23:57:18.547 に答える