Php 预匹配精确数

Php 预匹配精确数,php,regex,preg-match,Php,Regex,Preg Match,我正在使用 $regex = '/'.implode('|', 10).'/i'; preg_match($regex, $ids) 在ID($ID)列表中查找数字10。但是,如果ID列表如下所示: $ids = array(10, 110, 1010); 它会把他们都带回来吗?我怎样才能让它找到我要找的确切数字,而不仅仅是找到一个包含我要找的数字的数字 谢谢 编辑: 我在上面犯了一个错误。ID列表实际上是由逗号分隔的值组成的字符串。例如: $ids = "10,1010,101";

我正在使用

$regex = '/'.implode('|', 10).'/i';    
preg_match($regex, $ids)
在ID($ID)列表中查找数字10。但是,如果ID列表如下所示:

$ids = array(10, 110, 1010);
它会把他们都带回来吗?我怎样才能让它找到我要找的确切数字,而不仅仅是找到一个包含我要找的数字的数字

谢谢

编辑:

我在上面犯了一个错误。ID列表实际上是由逗号分隔的值组成的字符串。例如:

$ids = "10,1010,101";
很难解释这背后的整个想法过程,但这是我的全部代码:

<?php
$file  = fopen('allprods.csv', 'r');


$id = array($_GET['id']);    
$id = array_map('preg_quote', $id);
$regex = '/'.implode('|', $id).'/i';

$skus = array();
while (($line = fgetcsv($file)) !== FALSE) {  
    list($ids, $sku) = $line;

    if(preg_match($regex, $ids)) {
    $skus[] = $sku;
    }
}

$count = count($skus);
$i = 1;

echo $category_id;
foreach ($skus as $sku){
        echo $sku;
        if($i != $count) { echo "`"; }
        $i++;
}

谢谢大家的帮助。

不要为此使用正则表达式。在数组()中使用


在正则表达式中,如果您想找到精确的匹配,而不仅仅是子字符串匹配,则需要使用开始和结束锚定。这些在正则表达式中由
^
(开始)和
$
(结束)字符表示

因此,您要查找“10”而不是“110”等的正则表达式将是
/^10$/

但是,如果您正在查找一个数字,为什么不在数组()中使用
==

PHP完全能够计算数值,而无需使用正则表达式对其进行解析

$regex = '/^10$/';
只有当“^”是字符串的开头,$是字符串的结尾时,这才会匹配。

我会按照@Cfreak的建议在数组()中使用
,但是如果您想使用regex匹配
10
的id,您可以这样做

preg_match('/[^\d]?10[^\d]?/', implode('|', $ids))

如果您有
数组(1,101010010)
内爆()
会将其更改为
1 | 10 | 1010 | 010
,模式将与“10”匹配,而“10”前面或后面没有任何其他数字(即另一个
0
1
,如
0101

为什么不在|数组中使用(“10”,数组(…),true)对不起,伙计们,我已经意识到我的问题在上下文之外没有多大意义。你的回答可能会让我找到解决办法。我会发布一个简短的答复,你可能想考虑使用MySQL或类似的数据库。更快/更容易。是的,你可能就在那里-我会重新评估我的想法…我意识到这个答案对于我所问的是正确的,但是,我已经用更多信息更新了我的问题-因为这将在我的案例中起作用。谢谢干杯,解决方案张贴在上面
$regex = '/^10$/';
preg_match('/[^\d]?10[^\d]?/', implode('|', $ids))