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