仅选择内部嵌套文本

Selecting Inner nested text only

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

我的 REGEX 搞混了。我认为这可能需要递归 select,但我不确定如何做。

\[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]

Select 另一个 运行 或相同 运行 中的标签?

您可以使用这个使用否定前瞻的正则表达式来断言我们在结束 [/STORE]:

之前没有得到另一个 [STORE ...]
\[STORE [^\]]*\](?:(?!\[STORE [^\]]*\])[\s\S])*?\[\/STORE\]

RegEx Demo

这将匹配最里面的 STORE 标签或父级别独立的 STORE 标签。

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

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