我正在阅读一个GS1-128条形码,并试图将其分割成它所包含的片段,这样我就可以自动填写一张表格。
但是我想不出来,扫描我的条形码得到了以下信息:]编号2010年7月20日
所以我尝试从preg_match开始,并做了以下操作:
/]d2[01]{2}\d{14}[10|17|21]{2}(\w+)/
这给了我这个结果:
Array ( [0] => ]d2010704626096200210KT0BT2204 [1] => KT0BT2204 )
“我是一个人,我是一个人,我是一个人,我是一个人,我是一个人。
最后,这是我想要的结果(没有01,10,17,21):
(01) 07046260962002
(10) KT0BT2204
(17) 60900
(21) RNM5F8CTMMBHZSY7
01 - Always 14 chars after
17 - Always 6 chars after
10 can be up to 20 chars, but always has end delimiter <GS> - But if barcode ends with 10 <GS> is not present
21 can be up to 20 chars, but always has end delimiter <GS> - But if barcode ends with 21 <GS> is not present
我试着问这个问题:GS1-128 and RegEx但是我想不出来。
有人能帮我吗
2条答案
按热度按时间fslejnso1#
这个正则表达式应该可以做你想要的事情(注意,为了清楚起见,我把它分成了几行,你可以像这样用
x
(extended)标志来使用它,或者把它转换回一行):它寻找
^
,后跟文字]d2
,然后是以下一个或多个01
后跟14个字符(在g01
组中捕获)10
后跟最多20个字符,以[GS]
或行尾结尾(在g10
组中捕获)17
后跟6个字符(在g17
组中捕获)21
后跟最多20个字符,以[GS]
或行尾结束(在g21
组中捕获)$
完成注意,我们需要使用tempered greedy tokens来避免
10
或21
代码可能吞下下面的代码(如下面regex演示中的第二个示例)。Demo on regex101
在PHP中:
输出:
www.example.com上的演示3v4l.org
wlzqhblo2#
你可以试试这样的。
查看演示
https://regex101.com/r/Bw238X/1