正则表达式Tag-Within-Tag

我有一个相当简单的正则表达式问题,我还没有想到一个小小的个人实验。

在字符串中,我可能需要匹配几个[some characters here] 。 显而易见的方法是使用/ [ /\[.*?\]/ [ 。*? ]正则表达式来匹配[和之前]之后的任何字符。

但是,我希望能够在包含 。 这会导致问题。 如果我有以下内容:

 [some characters [in here] to match] 

一旦到达第一个结束括号,正则表达式就会停止匹配,并且完全无法匹配语句的最后部分。 我试图通过告诉正则表达式忽略任何内部来解决问题,因此我可以稍后对剥离的内容进行匹配。 我还没有完全开始工作。 我最接近的是:

 /\[(.*?(?:\[.*?\])*?.*?)\]/ 

这不太奏效。 我希望它能匹配任意数量的字符,以及任何内部标记(如果它们存在)。 然而,它仍然有第一个闭合支架的麻烦。

也许在正则表达式方面表现更好的人知道一个很好的解决方案。

虽然如果迷你语言变得更复杂,你可能应该删除正则表达式并手动执行此操作,但您可以使用递归正则表达式。

你的正则表达式看起来像这样:

 /(?(\w+\[([^\]\[]|\g)*\]))/ 

你可以在这里看到它: http : //rubular.com/r/9F7isgZpj9

这是正则表达式细分到它的部分:

 (?( # start a regex named "reg" \w+ # the tag name \[ # open bracket ( # which can contain [^\]\[] # non-bracket characters | # or \g # sub-tags (this is where the magic happens) )* # zero or more times \] # close the tag ) )