仅选择内部嵌套文本

时间:2016-10-06 15:52:01

标签: regex regular-language

我正在使用REGEX来选择自定义标记,但是其中一些标记具有相同名称的内部标记。我只想选择内部标签,所以我可以先处理它们。

我的REGEX正在变得混乱。我认为这可能需要递归选择,但我不知道如何。

\[STORE.*?\]((.*?|\n)*)\[\/STORE\]

文字:

 [STORE SMC, DODO]blah blah blah blah blah

   [STORE SMC]blah[/STORE]

   [STORE DODO]Blah[/STORE].

 [/STORE]

 Some text here I do not want selected.

 [STORE SMC]blah[/STORE]

在另一次运行或同一次运行中选择标签?

1 个答案:

答案 0 :(得分:1)

你可以使用这个使用负面lookaahead的正则表达式断言我们在结束[STORE ...]之前没有得到另一个[/STORE]

\[STORE [^\]]*\](?:(?!\[STORE [^\]]*\])[\s\S])*?\[\/STORE\]

RegEx Demo

这将匹配最内层STORE代码或父级独立STORE代码。

我已经为您提供了Javascript语法。如果您使用的是Java(Salesforce apax),那么您可以使用:

String = regex = "\\[STORE [^]]*\\](?:(?!\\[STORE [^]]*\\]).)*?\\[/STORE\\]";
final Pattern pattern = Pattern.compile(regex, Pattern.DOTALL);