2013-03-30 104 views
0

我的代碼:preg_grep匹配不正確?

$q = array('r%and_dy', 'cat09', '##$%%^'); 

$result = preg_grep('/[a-zA-Z0-9]+/', $q); 

print_r($result); 

使用JavaScript的相同的正則表達式將只匹配「cat09」,但在PHP中,這將返回:

Array 
(
    [0] => r%and_dy 
    [1] => cat09 
) 

我有什麼寫那麼它只返回'cat09'?

編輯:你想看到的JavaScript。帶有'g'標誌的JavaScript匹配函數與php中preg_grep的等價函數相同,但它不接受數組 - 這裏是一個小提琴,每個項目作爲一個單獨的行。 http://jsfiddle.net/64A5w/

編輯:jsfiddle已關閉,所以這裏是JavaScript的等價物。首先我應該提到,preg_grep只接受數組,並自動返回全局匹配(它不接受g標誌)。 Javascript match只接受字符串,並且必須指定g。

var str = 'r%and_dy'; 
var result = str.match(/[a-zA-Z0-9]+/g); 
document.write(result); 

其中顯示:r,and,dy。 PHP的等價物將通過preg_grep $str = array('r%and_dy')。它應該返回相同的數組但它返回r%and_dy作爲單個匹配(如上所示)。

+1

'使用與javascript相同的正則表達式'向我們展示您的JavaScript代碼,更改是您沒有使用/ g標誌使它只匹配一次。 –

+0

在JavaScript中使用它意味着什麼?顯示你的JS代碼 –

+2

或者用'^ $'來錨定JavaScript。如果你不想匹配'r%and_dy',使用'/^[a-zA-Z0-9] + $ /' –

回答

0

你的問題是你匹配的字符串包含一個或多個字母數字字符。嘗試:

$q = array('r%and_dy', 'cat09', '##$%%^'); 
$result = preg_grep('/^[a-zA-Z0-9]+$/', $q);  
print_r($result); 

^$意味着開始和字符串的分別結束。

manual

返回由匹配給定圖案,所述輸入陣列的元件的陣列。

+0

我希望有更類似於JavaScript匹配的東西,基本上過濾出一個字符串,但我不認爲它存在於php – inorganik

+0

我不確定你的意思是通過篩選一個字符串,如果你有其他問題可以隨時在SO或者SO PHP聊天室裏詢問他們, –

+0

所以對於js你可以使用'r%and_dy',使用'match',然後'join(' ')',最後是'randy' - 過濾掉字符串。 – inorganik