我希望从文档中提取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
)
)
答案 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
- 尾随字边界。$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 )