2011-01-10 75 views
4

我需要檢查某個字符串的字符串,我想使用正則表達式來處理這個問題,但是我一直試圖使用越多,就越容易混淆(並且讓我失望)。我似乎無法做到。似乎無法得到正確的正則表達式

我需要表達時,該字符串包含這樣的返回true:[[module:instance]],但它需要滿足以下條件:

  • 始終打開與2個支架[[
  • 兩個支架後,字符串可以包含除:一切,並沒有限制它的長度
  • 後串1個:字符必須存在
  • 0後再次,它可以包含一切,除了一個:,並沒有限制它一個字符串的長度
  • 始終關閉2個支架]]

任何幫助,提示,好的教程,任何將不勝感激!

在此先感謝!

+0

只是評論 - 正則表達式的執行措施的速度和嘗試做同樣沒有正則表達式。我有一種感覺,沒有正則表達式的直接變體可以更快。 – 2011-01-10 21:23:52

+0

`[[a [[b:c]] d]``應該匹配什麼? – Gumbo 2011-01-10 21:32:34

回答

6

試試這個:

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

的解釋:

  • \[\[匹配字面[[
  • [^:]+?匹配任何不是:(非貪婪)
  • :匹配字面:
  • [^:]+?匹配任何不是:(非貪婪)
  • ]]匹配的文字]]
1

嘗試此您正則表達式:因爲他們的元字符喜歡

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

有反斜槓,方括號之前需要,*和?。

+0

這也會匹配`[[:::: module:]]`,不是嗎? – 2011-01-10 21:12:54

+0

否。一旦達到第一個`:`,第一個非貪婪匹配就會停止,中間`:`是必需的,而最後一個組匹配*,但是*`:`。然而,[[:]]確實匹配(不確定OP是否需要)。 – Jacob 2011-01-10 21:16:38

0

\[\[[^:]+\:[^:]+\]\]怎麼樣?那樣有用嗎?

應該匹配兩個文字[字符,那麼任何字符未:至少重複一次,然後:,那麼,是不是:至少一次,然後2字面中]任何字符。

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

說明:

\[\[匹配兩個開放支架。

[^:]匹配任意一個字符除了冒號。

[^:]+匹配一個或多個字符,除了冒號。

0

這項工作?

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

相關問題