php preg_match标签分隔

时间:2009-12-16 19:25:34

标签: php preg-match

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

数组看起来像:

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

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

这样做的好方法是什么?

6 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

preg_grep一起试用正则表达式/^0003,/

$array = array('001,Foo,Bar', '0003,Foo,Bar', '3000,Foo,Bar', '3333433,Foo,Bar');
$matches = preg_grep('/^0003,/', $array);
var_dump($matches);

答案 2 :(得分: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'));

答案 3 :(得分:0)

REGEXP替换为:strpos()substr()

关注您的修改:

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

答案 4 :(得分: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

答案 5 :(得分: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'