提取GTIN(正则表达式)

时间:2016-12-09 12:15:40

标签: php regex

我希望从文档中提取GTIN代码,它们是8位,12位,13位或14位数字。所以我这样做:

$html = '8 digit 12345678 and now 12 digit 123456789012';

$extractGTIN = '/\d{7}$|^\d{11}$|^\d{12}$|^\d{13}/mi'; 
preg_match_all($extractGTIN, $html, $barcodes);

echo print_r ($barcodes, 1);    

......但出乎意料的是,它返回:

Array
(
    [0] => Array
        (
            [0] => 6789012
        )

)

1 个答案:

答案 0 :(得分:6)

您尚未正确锚定备选方案,请使用字边界。您可以在此处使用可选组来代替替换:

/\b\d{8}(?:\d{4,6})?\b/

请参阅regex demo

<强>详情:

  • \b - 领先的单词边界
  • \d{8} - 8位数字
  • (?:\d{4,6})? - 4位,5位或6位数的可选序列(因此,所有8位,12位,13位,14位数都匹配)
  • \b - 尾随字边界。

PHP demo

$text = '8 digit 12345678 and now 12 digit 123456789012';
$extractGTIN = '/\b\d{8}(?:\d{4,6})?\b/'; 
preg_match_all($extractGTIN, $text, $barcodes);
print_r($barcodes[0]);
// => Array ( [0] => 12345678 [1] => 123456789012 )