我需要一个正则表达式来查找数组上的前 N 个字符,直到找到制表符或逗号分隔符。
数组看起来像:
array (
0 => '001,Foo,Bar',
1 => '0003,Foo,Bar',
2 => '3000,Foo,Bar',
3 => '3333433,Foo,Bar',
)
我正在寻找前 N 个字符,例如,要搜索的模式是0003,获取数组索引 1 ...
这样做的好方法是什么?
我需要一个正则表达式来查找数组上的前 N 个字符,直到找到制表符或逗号分隔符。
数组看起来像:
array (
0 => '001,Foo,Bar',
1 => '0003,Foo,Bar',
2 => '3000,Foo,Bar',
3 => '3333433,Foo,Bar',
)
我正在寻找前 N 个字符,例如,要搜索的模式是0003,获取数组索引 1 ...
这样做的好方法是什么?
/^(.*?)[,\t]/
?
尝试正则表达式/^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);
$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'
这段 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'));
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