php preg_match sekme ayrılmış

6 Cevap php

Bir sekme veya virgül ayırma bulununcaya kadar ben bir dizide ilk N karakter aramak için normal bir ifade gerekir.

dizi bakmak gibi:

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

Ben ilk N karakter arıyorum, yani örneğin, aramak için model 0003, dizi indeksi 1 olsun ...

Ne Bunu yapmanın iyi bir yolu olacaktır?

6 Cevap

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

?

Bir regexp bir yedek olacaktır: strpos() ve substr()

Katkınızı aşağıdaki:

Strpos bir virgül () arıyor ve substr () ile gerekli dize aldıktan sonra, trim() kullanın.

dize preg_split kullanın

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

veya

array_walk($arr, create_function('&$v', 'list($v,$rest) = preg_split("/[\t,]+/", $string);'); //syntax not checked

Bu PHP5 kod sonunda bir virgül bekliyor, ilk elemanı üzerinde bir önek arama yapacak. Daha iyi arama hız istiyorsanız, O (n) var, doğrusal, vb, yavaş, verimsiz Daha iyi bir veri yapısı gerekir.


<?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'));
$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);

this will print

  0 =>  '001',
  1 => '0003',
  2 => '3000',
  3 => '3333433'