用双平方括号括起来的任何东西的正则表达式

时间:2015-05-17 16:17:11

标签: php regex string

我一直试图提取一些字符串或任何包含在双方括号中的值。即[[hello world]][[12_ nine]]等等。这意味着任何东西,但是用两个方括号括起来。请检查我尝试过的URL。但是,我在下面解释我做了什么:

/\[[^\]]*\]]/

此模式可以验证[[]]内的任何内容。我的问题是,它也验证了[]]。我举两个例子,这个部分验证了[[Welcome]] [v2.0]]。我需要第二个例子不应该被验证。查看URL,您可以更好地理解。

2 个答案:

答案 0 :(得分:2)

你需要这个:

/\[\[[^\]]*\]\]/

以下是它的定义:

  • 前两个(转义)括号:\[\[
  • 然后是不是括号的内容:[^\]]*
  • 然后是两个右括号:\]\](你可以保持它们不转义,这是一种风格问题)

请注意,它不会匹配中间带方括号的字符串(例如[[ A [B] C]])。如果要允许这些字符串,请使用

/\[\[.*?\]\]/

如果必须是整个字符串,如下面的评论所示,请使用

/^\[\[.*?\]\]$/      (if you want to allow brackets inside)
/^\[\[[^\]]*\]\]$/   (if you don't)

^ $是字符串锚点的结尾,让您测试整个字符串。

答案 1 :(得分:2)

试试这个正则表达式

\[{2}[^\[\]]+\]{2}

试试这个Demo

<强>解释

  1. \[{2}我想要[[

  2. \[{2}我想要]]

  3. [^\[\]]+我想要的任何内容都不是[]重复一次或多次

  4. 如果你想只捕捉两个括号

    (?<=[^\[]\[{2})[^\[\]]+(?=\]{2}(?!\]))
    

    试试这个Demo