2016-12-09 18 views
1

GTINコードを文書から抽出すると、8,12,13、または14桁の数字になります。だから私はこれをやっている:GTIN(正規表現)を抽出する

$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 
     ) 

) 
+3

'^'と '$' **、ないパターンの**文字列の開始と終了のためのものです。 –

答えて

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)