似乎无法正确使用正则表达式模式

时间:2011-01-10 21:05:27

标签: php regex

我需要检查一个字符串是否有某个字符串,我想使用正则表达式,但是我继续尝试的越多,它就越混淆(并且让我感到沮丧);我似乎无法做对。

当字符串包含这样的内容时,我需要表达式返回true:[[module:instance]],但它需要满足以下条件:

  • 始终打开2个方括号[[
  • 在两个括号之后,字符串可以包含除:之外的所有内容,并且对其长度没有限制
  • 字符串1 :字符必须存在后
  • :后再添加一个字符串,该字符串可以包含:以外的所有内容,并且对其长度没有限制
  • 始终以2个方括号]]
  • 关闭

任何帮助,提示,好的教程,任何事情都会非常感激!

提前致谢!

5 个答案:

答案 0 :(得分:6)

试试这个:

preg_match('/\[\[[^:]+?:[^:]+?]]/', $str, $match)

解释:

  • \[\[ 与文字[[
  • 相匹配
  • [^:]+? 匹配:(非贪婪)
  • 以外的任何内容
  • : 与文字:
  • 相匹配
  • [^:]+? 匹配:(非贪婪)
  • 以外的任何内容
  • ]] 与文字]]匹配。

答案 1 :(得分:2)

\[\[[^:]+:[^:]+\]\]

说明:

\[\[匹配两个左括号。

[^:]匹配任何一个字符,但冒号除外。

[^:]+匹配一个或多个字符,但冒号除外。

答案 2 :(得分:1)

试试这个正则表达式:

\[\[.*?:[^:]*?\]\]

在方括号前需要反斜杠,因为它们是元字符,如。,*和?。

答案 3 :(得分:0)

\[\[[^:]+\:[^:]+\]\]怎么样?这有用吗?

它应该匹配两个文字[字符,然后任何非:字符至少重复一次,然后是:,然后是任何不是:的字符至少一次,然后是两个文字]字符。

答案 4 :(得分:0)

这会有用吗?

[[[^:] :{1} [^:] ]]