2011-11-27 13 views
0

我有以下的正則表達式:PHP正則表達式不匹配 - 有什麼不對?

"^[x]{1}[a-z]{3,4}:[a-z0-9]{1,6}" 

我想用它能夠匹配字符串一樣:

XABC:Z123

然而,當我嘗試它this regex tester ,它與模式不匹配。是我的模式是錯誤的,還是在線測試器不可靠?

如果我的模式是錯誤的,有人能指出它爲什麼是錯的。

此外,我想使模式匹配不區分大小寫 - 但我不太確定最好的方式來做到這一點(思考問題而不是反覆試驗)。不管情況如何,我如何更改模式以便匹配?

+0

對於我用'^ [x] {1} [az] {3,4}:[a-z0-9] {1,6}'作爲正則表達式(不帶引號) 。不區分大小寫的版本['/^[x]{1}[az]{3,4}:[a-z0-9]{1,6}/i'](http://php.net/manual/en /function.preg-match.php#example-4213)。 –

+0

@rebus是的,我想OP想要匹配組(請參閱我的更新回答)。 – middus

+0

不知道,不說有關的問題。 –

回答

4

只需添加一個i不區分大小寫的匹配:

/^[x]{1}[a-z]{3,4}:[a-z0-9]{1,6}/i 

順便說一句,你的正則表達式的工作!?

輸出:

Array 
(
    [0] => xabc:z123 
) 

如果你想擁有這樣的:

Array 
(
    [0] => 'xabc:z123', 
    [1] => 'x', 
    [2] => 'abc' 
    ... 
) 

你需要使用()添加組,如:

/^([x]{1})([a-z]{3,4}):([a-z0-9]{1,6})/i 
+0

我其實並不想要團體。你能告訴我你使用正則表達式測試儀的設置嗎?具體而言,您使用了「選擇前置類型:」和「選擇功能:」的值? –

+0

對不起,我剛剛看到你的評論。當你接受答案時,我想它對你有用;)。無論如何:我只是保持默認值:)。 – middus

2

在測試儀,你必須在沒有周圍引號的情況下輸入正則表達式。在PHP源代碼中,您必須使用引號的正則表達式分隔符;測試儀顯示在它生成的代碼中:

$ptn = "/^[x]{1}[a-z]{3,4}:[a-z0-9]{1,6}/"; 

爲了使其不區分大小寫,您有兩種選擇。一個是在結束分隔符後添加一個i,如@ middus的答案所示。另一種是添加(?i)的正則表達式本身:

(?i)^[x]{1}[a-z]{3,4}:[a-z0-9]{1,6} 

測試儀將接受任何一種方式;如果您不自己添加分隔符,則會將/添加到任意一端,這意味着您的正則表達式中的任何斜槓都需要轉義(即,它不會爲您跳過)。請注意,PHP允許您使用其他字符作爲分隔符,但該測試器僅識別/

一些進一步的說明:

  • 匹配單個x,你需要的是x。只有一個字母在裏面時,方括號是不必要的,量詞從來沒有任何影響 - 這是純粹的混亂。

  • 如果您使用正則表達式來驗證字符串,您可能需要將$錨添加到最後。

最終結果:

/^x[a-z]{3,4}:[a-z0-9]{1,6}$/i 

Here是另一個測試儀,讓你選擇自己的分隔符,等等。