我有一个相当简单的正则表达式问题,我还没有想到一个小小的个人实验.
在字符串中,我可能有几个<tag>[some characters here]我需要匹配的字符串.显而易见的方法是使用/<tag>\[.*?\]/正则表达式来匹配在<tag>[之前和之后的任何字符].
但是,我希望能够拥有<tag>s <tag>.这会导致问题.如果我有以下内容:
<tag>[some characters <tag>[in here] to match]
Run Code Online (Sandbox Code Playgroud)
一旦到达第一个结束括号,正则表达式就会停止匹配,并且完全无法匹配语句的最后部分.我试图通过告诉正则表达式忽略任何内部<tag>s 来解决问题,所以我可以稍后对剥离的内容进行匹配.我还没有完全开始工作.我最接近的是:
/<tag>\[(.*?(?:<tag>\[.*?\])*?.*?)\]/
Run Code Online (Sandbox Code Playgroud)
哪个不太合适.我希望它能匹配任意数量的字符,以及任何内部标记(如果它们存在).然而,它仍然有第一个结束括号的麻烦.
也许那些在正则表达式方面表现更好的人知道一个很好的解决方案.
虽然如果迷你语言变得更复杂,你可能应该删除正则表达式并手动执行此操作,但您可以使用递归正则表达式.
你的正则表达式看起来像这样:
/(?<reg>(\w+\[([^\]\[]|\g<reg>)*\]))/
Run Code Online (Sandbox Code Playgroud)
你可以在这里看到它:http://rubular.com/r/9F7isgZpj9
这是正则表达式细分到它的部分:
(?<reg>( # start a regex named "reg"
\w+ # the tag name
\[ # open bracket
( # which can contain
[^\]\[] # non-bracket characters
| # or
\g<reg> # sub-tags (this is where the magic happens)
)* # zero or more times
\] # close the tag
)
)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
624 次 |
| 最近记录: |