我需要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”部分。 谁能帮我? 提前谢谢!
答案 0 :(得分: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]*
。
如果要解析文件,则需要使用此方法