正则表达式匹配外部嵌套标签

时间:2018-01-06 22:53:55

标签: regex

我有这个字符串

blabla [IC="test"]Hello, [IC="testing"] this is a nested tag [EC], cya.[EC] blabla

我试图匹配外部[IC="..."]...[EC]所以我可以

[IC="test"]Hello, [IC="testing"] this is a nested tag [EC], cya.[EC]

我目前有这个

\[IC=\"([\s\S]*?)\"]([\s\S]*?)\[EC]\n{0,1}

但是在最后一个结束标记[EC]

之前它不匹配

这是我在regex101

上的代码示例

4 个答案:

答案 0 :(得分:1)

您可以使用递归模式(PCRE支持):

\[IC[^][]*\]
(?:(?:[^][]*|(?R))*)
\[EC\]

请参阅a demo on regex101.com

答案 1 :(得分:1)

试试这个:

(\[IC="\w*"\].*\[EC\])

https://regex101.com/r/MVU9ni/1

匹配位于[IC="any_word_character_here"][EC]之间的0个或多个字符。

答案 2 :(得分:1)

我不会决定使用\s\S,它似乎比实际应该更令人困惑。 但是,要解决此问题,您只需删除?

即可
...([\s\S]*?)\[EC]...

...([\s\S]*)\[EC]...

导致

\[IC=\"([\s\S]*?)\"]([\s\S]*)\[EC]\n{0,1}

但是我会简单地使用\w.*,因为它们更容易

\[IC="(\w*)"\](.*)\[EC\]

编辑:

假设您实际需要从[IC =“..”]获取字符串值并在其间输入字符串。否则,如果您只需要整个数据,则不需要分组

\[IC="\w*"\].*\[EC\]

答案 3 :(得分:0)

下面的正则表达式可以解决这个问题:

[^\[]*(\[.*\])[^\]]*

您可以尝试访问this link的工作演示。

或者,如果您不想依赖捕获组,这应该足够了:

(\[.*\])

可以测试上面正则表达式的工作演示here