获取指定长度的字符串

Ano*_*inn 2 php regex

假设有一个数组如下:

$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条件可以省略)?先感谢您.

anu*_*ava 5

这种易于处理的外观正则表达式和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)