0

我需要 Java RegExp 可以匹配除标签 \begin{name} 和 \start{name} 之间的文本之外的所有内容,如下所示(标签可以嵌套):

\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 回答