2013-03-30 55 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