正则表达式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 ) )