RegEx - 忽略标记之外的字符串

时间:2013-11-05 23:30:56

标签: java regex string extract

我需要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”部分。 谁能帮我? 提前谢谢!

1 个答案:

答案 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]*

如果要解析文件,则需要使用此方法