-2

如何在数组中找到类似[number]的模式?

我有一个类似的数组:

$array = array('1', '2', '3', '{1}', '{2}', '{3}', '[1]', '[2]', '[3]');

如何过滤数组并仅保存具有特定模式的字符串,例如[a number]

4

5 回答 5

3

您可以使用 过滤数组array_filter(),然后遍历它:

$filtered_array = array_filter( $array, function( $el) { 
    return preg_match( '/^\[\d+\]$/', $el);
});

这是使用回调preg_match()来查找由左方括号[,然后是数字\d+,然后是右方括号组成的条目]

于 2013-07-29T12:46:37.307 回答
3

你可以试试is_array()

foreach ($array as $num) {
  if(is_array($num)) {
    echo $num . "<br />";
  }
}
于 2013-07-29T12:46:37.210 回答
1

有几种可能,这里有两种。

<?php

$array = array(1, 2, 3, "{1}", "{2}", "{3}", "[1]", "[2]", "[3]");



// Method 1
foreach ($array as $num)
{
    if(preg_match("/\[\d+\]/", $num)){
        echo $num . "<br />";

    }
}
echo "<hr/>"
// Method 2
$filtered=preg_grep("/\[\d+\]/", $array);
foreach ($filtered as $num)
{
    echo $num . "<br />";
}

?>
于 2013-07-29T12:54:27.667 回答
0

只需使用preg_grep

$array = array(1, 2, 3, '{1}', '{2}', '{3}', '[1]', '[2]', '[3]');

$new_array = preg_grep('#^\[\d+(?:.\d+)?\]$#', $array);
$new_array = array_values($new_array); // re-index the array
print_r($new_array); // print the results

解释正则表达式:

  • ^: 字符串开头
  • \[: 匹配[
  • \d+: 匹配 1 位或更多位
  • (?:.\d+)?: 可选匹配小数部分
  • \]: 匹配]
  • $: 字符串结束
于 2013-07-29T12:47:38.320 回答
0

可能是这样的?正则表达式匹配开头[,后跟一个数字,然后是结尾]

foreach ($array as $num) { 
    if ( preg_match( '#\[\d\]#', $num ) ) {
       echo $num;
    }
}
于 2013-07-29T12:48:32.503 回答