2011-07-11 50 views
2

我嘗試使用正則表達式檢查索引字符串(例如$string = "[index]")。該索引必須與索引名稱內的非法字符[]進行覈對。因此,例如[in[dex]必須失敗。使用正則表達式檢查類似索引的模式

我第一次嘗試:

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

所以字符串必須開始與[]結束。對於否定性格類,我現在嘗試使內聯方括號非法,但這不起作用。

任何想法?

在先進的感謝,
約翰尼


編輯:我很困惑。我重新運行我爲此編寫的測試,現在工作正常。當我在編輯的歷史中工作時,我認爲我錯過了一些東西。感謝大家的幫助。

+0

你說這不能正常工作。給出一個行爲與你預期不同的例子。命令行'php -r'echo preg_match(「/^\ [[^ \ [\]] * \] $ /」,「[in [dex]」);''打印一個'0';正如預期的那樣 – Oswald

+0

您是使用preg還是ereg?如果你使用ereg,它將不起作用。看到我的帖子下面。 –

+0

我很困惑。我跑了不同的測試,都失敗了。現在我想倒過來發布一些例子,一切工作正常。 @Ryan Gross:我使用preg_match。 – Johnny

回答

3

這個/^\[[^[\]]+\]$/爲我工作。

/^\[[^[\]]+\]$/.test("[index]") // true 
/^\[[^[\]]+\]$/.test("[in[dex]") // false 
/^\[[^[\]]+\]$/.test("[in]dex]") // false 
  1. /^\[始於支架
  2. [^開放「而不是」語法
  3. [\]排除字符
  4. ]+密切不是說我們只需要1 +事情經過不語法(變化星號匹配[])
  5. \]$/表達式將以閉括號結束。
0

你應該使用preg_match工作。如果你正在使用ereg,那麼它將不起作用。 Ereg已被棄用as of PHP 5.3。我在regextester.com上針對以下內容嘗試了你的正則表達式,它在preg下工作,在ereg下失敗。

[index] 
[in[dex] 
[in[de]x] 
d[index] 
[inde]x] 
[index]d 
0
/^\[[^][]+\]$/ 

這就是你想要的?

  • 匹配一個[字符
  • 匹配單個字符不存在於列表中「] [」 1至無限次,儘可能,用之於根據需要多次(貪婪)
  • 匹配a]字符
+0

'[\ []'?可以使用'\ ['或'[[]',但是兩者? (同樣適用於'[\]]'。) – Qtax

+0

有道理,謝謝! –

0

我現在可以看到正確的正則表達式不起作用的唯一原因是,如果您在PHP中引用時沒有正確轉義它。應該引用這樣的內容:"/^\\[[^[\\]]*\\]$/"