0

我需要一个正则表达式来查找数组上的前 N ​​个字符,直到找到制表符或逗号分隔符。

数组看起来像:

array (
  0 => '001,Foo,Bar',
  1 => '0003,Foo,Bar',
  2 => '3000,Foo,Bar',
  3 => '3333433,Foo,Bar',
)

我正在寻找前 N 个字符,例如,要搜索的模式是0003,获取数组索引 1 ...

这样做的好方法是什么?

4

6 回答 6

2
/^(.*?)[,\t]/

?

于 2009-12-16T19:30:14.947 回答
1

尝试正则表达式/^0003,/preg_grep

$array = array('001,Foo,Bar', '0003,Foo,Bar', '3000,Foo,Bar', '3333433,Foo,Bar');
$matches = preg_grep('/^0003,/', $array);
var_dump($matches);
于 2009-12-16T19:33:57.260 回答
0
$pattern = '/^[0-9]/siU';

for($i=0;$i<count($yourarray);$i++)
{
   $ids = $yourarray[$i];
  if(preg_match($pattern,$ids))
  {
    $results[$i] =  $yourarray[$i];
  }

}
print_r($results);

这将打印

  0 =>  '001',
  1 => '0003',
  2 => '3000',
  3 => '3333433'
于 2009-12-16T20:02:55.350 回答
0

这段 PHP5 代码将对第一个元素进行前缀搜索,期望尾随逗号。它是 O(n)、线性、低效、慢等。如果您想要更好的搜索速度,您将需要更好的数据结构。


<?php
function searchPrefix(array $a, $needle) {
    $expression = '/^' . quotemeta($needle) . ',/';
    $results = array();

    foreach ($a as $k => $v) 
        if (preg_match($expression, $v)) $results[] = $k;

    return $results;
}   

print_r(searchPrefix($a, '0003'));
于 2009-12-16T19:30:44.957 回答
0

一个 REGEXP 替换将是:strpos()substr()

在您的编辑之后:

在使用strpos() 搜索逗号并使用 substr() 检索所需字符串之后,使用trim( )。

于 2009-12-16T19:35:10.913 回答
0

preg_split在字符串上使用

$length=10;
foreach($arr as $string) {
  list($until_tab,$rest)=preg_split("/[\t,]+/", $string);
  $match=substr($until_tab, $length);
  echo $match; 
}

或者

array_walk($arr, create_function('&$v', 'list($v,$rest) = preg_split("/[\t,]+/", $string);'); //syntax not checked
于 2009-12-16T19:35:48.550 回答