我的代码:
$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
作为单个匹配(如上所示)。
答案 0 :(得分:0)
您的问题是您匹配包含一个或多个字母数字字符的字符串。尝试:
$q = array('r%and_dy', 'cat09', '##$%%^');
$result = preg_grep('/^[a-zA-Z0-9]+$/', $q);
print_r($result);
^
和$
分别表示字符串的开头和结尾。
来自manual:
返回由与给定模式匹配的输入数组元素组成的数组。