似乎无法得到正确的正则表达式
我需要检查某个字符串的字符串,我想使用正则表达式来处理这个问题,但是我一直试图使用越多,就越容易混淆(并且让我失望)。我似乎无法做到。似乎无法得到正确的正则表达式
我需要表达时,该字符串包含这样的返回true:[[module:instance]]
,但它需要满足以下条件:
- 始终打开与2个支架
[[
- 两个支架后,字符串可以包含除
:
一切,并没有限制它的长度 - 后串1个
:
字符必须存在 - 0后再次,它可以包含一切,除了一个
:
,并没有限制它一个字符串的长度 - 始终关闭2个支架
]]
任何帮助,提示,好的教程,任何将不胜感激!
在此先感谢!
试试这个:
preg_match('/\[\[[^:]+?:[^:]+?]]/', $str, $match)
的解释:
-
\[\[
匹配字面[[
-
[^:]+?
匹配任何不是:
(非贪婪) -
:
匹配字面:
-
[^:]+?
匹配任何不是:
(非贪婪) -
]]
匹配的文字]]
。
尝试此您正则表达式:因为他们的元字符喜欢
\[\[.*?:[^:]*?\]\]
有反斜杠,方括号之前需要,*和?。
这也会匹配`[[:::: module:]]`,不是吗? – 2011-01-10 21:12:54
否。一旦达到第一个`:`,第一个非贪婪匹配就会停止,中间`:`是必需的,而最后一个组匹配*,但是*`:`。然而,[[:]]确实匹配(不确定OP是否需要)。 – Jacob 2011-01-10 21:16:38
\[\[[^:]+\:[^:]+\]\]
怎么样?那样有用吗?
应该匹配两个文字[
字符,那么任何字符未:
至少重复一次,然后:
,那么,是不是:
至少一次,然后2字面中]
任何字符。
\[\[[^:]+:[^:]+\]\]
说明:
\[\[
匹配两个开放支架。
[^:]
匹配任意一个字符除了冒号。
[^:]+
匹配一个或多个字符,除了冒号。
这项工作?
[[[^:] :{1} [^:]]
只是评论 - 正则表达式的执行措施的速度和尝试做同样没有正则表达式。我有一种感觉,没有正则表达式的直接变体可以更快。 – 2011-01-10 21:23:52
`[[a [[b:c]] d]``应该匹配什么? – Gumbo 2011-01-10 21:32:34