2012-08-08 69 views
3

我正在嘗試一個簡單的正則表達式對PHP中的字符串。我努力的正則表達式是PHP:正則表達式 - 未知修飾符錯誤

[A-Za-z0-9\-_]* 

如何以往當我使用它在PHP中,我得到一個錯誤說:

Warning: preg_match(): Unknown modifier '*' in "C:/apache/....." on line 2 

這裏是我的代碼:

<?php 
if(preg_match("[A-Za-z0-9\-_]*",'vidhu_1911')){ 
    echo "it matched!"; 
}else{ 
    echo "fail to match"; 
} 
?> 

你可以告訴我我做錯了?

感謝, Vidhu

回答

8

你需要在你的正則表達式

<?php 
if(preg_match("/[A-Za-z0-9\-_]*/",'vidhu_1911')){ 
    echo "it matched!"; 
}else{ 
    echo "fail to match"; 
} 
?> 

正則表達式的分隔符在代碼中的方括號已解釋爲正則表達式分隔符,關閉分隔符後面的字符是正則表達式的修飾符。所以*被視爲修飾符,但它不是一個有效的修飾符。

欲瞭解更多詳情,請參閱Delimiters on php.net

+0

好的,我做到了。但它不起作用。這一次它沒有給出錯誤,但它似乎幾乎匹配我放入的每一個字符串。就像它不應該匹配「vidhu 1911」,因爲它有一個空間。但它的確如此。任何想法爲什麼? – Krimson 2012-08-08 11:42:53

+2

這是一個不同的問題。我能告訴你什麼嗎?它幾乎不會匹配每個字符串,它會匹配每個字符串。如果你只想匹配那些只包含這些字符**的字符串,你需要將你的正則表達式錨定到字符串開始和結尾'/^[A-Za-z0-9 \ -_] * $ /'。否則,它會匹配任何子字符串並說:「是的,我找到了一封信!」。請注意,它也會匹配空字符串!因爲你使用了'*',如果你不想要這個,使用量詞'+'來匹配至少一個字符。 – stema 2012-08-08 12:00:56

2

您必須在其斜線正則表達式:

<?php 
if(preg_match("/[A-Za-z0-9\-_]*/",'vidhu_1911')){ 
    echo "it matched!"; 
}else{ 
    echo "fail to match"; 
} 
?> 
相關問題