preg_grep匹配错误?

时间:2013-03-30 19:13:08

标签: php javascript regex pcre

我的代码:

$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 个答案:

答案 0 :(得分:0)

您的问题是您匹配包含一个或多个字母数字字符的字符串。尝试:

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

^$分别表示字符串的开头和结尾。

来自manual

  

返回由与给定模式匹配的输入数组元素组成的数组。