我需要 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' 部分。谁能帮我?提前致谢!
就像是 :
"\\\\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]*相应地更改。
如果您正在解析文件,您将需要这种方法