假设有一个数组如下:
$arr = array('foo1234bar', 'foo1234', '1234bar', 'foo12345bar');
Run Code Online (Sandbox Code Playgroud)
我只是需要一个包含的元素4个的总字符只.所以除了foo12345bar之外,其他3个元素都是有效的.
因为'\d{4}'会匹配foo12345bar,所以我尝试笨拙地说:
$arr = array('foo1234bar', 'foo1234', '1234bar', 'foo12345bar');
$result = array();
foreach ($arr as $value) {
preg_match('/\d+/', $value, $match);
if (strlen($match[0]) != 4) {
continue;
}
$result[] = $value;
}
var_dump($result); //array('foo1234bar', 'foo1234', '1234bar')
Run Code Online (Sandbox Code Playgroud)
是否有直接匹配的正则表达式(因此if条件可以省略)?先感谢您.
这种易于处理的外观正则表达式和preg_grep功能:
$arr = array('foo1234bar', 'foo1234', '1234bar', 'foo12345bar');
print_r(preg_grep('/(?<!\d)\d{4}(?!\d)/', $arr));
Run Code Online (Sandbox Code Playgroud)
RegEx分手:
(?<!\d) # assert previous char is not a digit
\d{4} # match exact 4 digits
(?!\d) # assert next char is not a digit
Run Code Online (Sandbox Code Playgroud)
输出:
Array
(
[0] => foo1234bar
[1] => foo1234
[2] => 1234bar
)
Run Code Online (Sandbox Code Playgroud)