匹配双方括号的内容

时间:2013-12-16 10:35:37

标签: regex square-bracket

我有一个字符串,我想匹配双方括号的内容: 例如:

<p><span>"Sed ut perspiciatis vel illum qui dolorem eum fugiat quo voluptas nulla pariatur?"</span></p><p><span>[[image file="2013-12/5s_1.jpg" alt="IPhone 5s" title="IPhone 5s" ]]</span></p><p><span>[[download file="2013-12/modulo-per-restituzione-prodotti-.pdf" icon="icon" text="" title="Download" ]]</span></p>

结果:

download file="2013-12/module-res.pdf" icon="icon" text="" title="Download" 

image file="2013-12/5s_1.jpg" alt="IPhone 5s" title="IPhone 5s" 

考虑到这两个字符串可以包含任何类型的字符,我尝试了这个解决方案但是我遇到了其他字符的问题:

\[\[[\w+\s*="-\/]*\]\]

3 个答案:

答案 0 :(得分:1)

使用negated character class

怎么样?
\[\[[^\]]*\]\]

此课程将匹配“]”

以外的任何内容

Regexr

上查看

为避免方括号成为结果的一部分,您可以使用capturing group

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

并从第1组获得结果

或使用lookaround assertions(如果你的正则表达式引擎支持它)

(?<=\[\[)[^\]]*(?=\]\])

Regexr

上查看

答案 1 :(得分:1)

如果你可以使用前瞻:

\[\[(([^]]|[]](?!\]))*)\]\]

含义:

\[\[    # match 2 literal square brackets
 (      # match
    [^]]         # a non-square bracket
    |            # or
    []](?!\])    # a square bracket not followed by a square bracket
 )*     # any number of times
\]\]    # match 2 literal right square brackets

或者您可以使用延迟量词:

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

答案 2 :(得分:0)

此正则表达式将选择方括号,但使用组(1),您将只能获取内容:

"\\[\\[\\(.*\\)\\]\\]"