我正在使用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]
在另一次运行或同一次运行中选择标签?
答案 0 :(得分:1)
你可以使用这个使用负面lookaahead的正则表达式断言我们在结束[STORE ...]
之前没有得到另一个[/STORE]
:
\[STORE [^\]]*\](?:(?!\[STORE [^\]]*\])[\s\S])*?\[\/STORE\]
这将匹配最内层STORE
代码或父级独立STORE
代码。
我已经为您提供了Javascript语法。如果您使用的是Java(Salesforce apax),那么您可以使用:
String = regex = "\\[STORE [^]]*\\](?:(?!\\[STORE [^]]*\\]).)*?\\[/STORE\\]";
final Pattern pattern = Pattern.compile(regex, Pattern.DOTALL);