php preg_match tab tab - PullRequest
       10

php preg_match tab tab

0 голосов
/ 16 декабря 2009

Мне нужно регулярное выражение для поиска первых N символов в массиве, пока не будет найдено разделение табуляцией или запятой.

массив выглядит так:

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

Я ищу первые N символов, поэтому, например, шаблон поиска 0003 , получить индекс массива 1 ...

Что было бы хорошим способом сделать это?

Ответы [ 6 ]

2 голосов
/ 16 декабря 2009
/^(.*?)[,\t]/

1 голос
/ 16 декабря 2009

Попробуйте регулярное выражение /^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);
0 голосов
/ 16 декабря 2009
$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'
0 голосов
/ 16 декабря 2009

используйте 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
0 голосов
/ 16 декабря 2009

Замена REGEXP будет выглядеть следующим образом: strpos () и substr ()

После вашего редактирования:

Используйте trim () , после поиска запятой с помощью strpos () и получения нужной строки с помощью substr ().

0 голосов
/ 16 декабря 2009

Этот код 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'));
...