我想知道通过PHP使用Reg Exp提取包裹/AIN号码的最安全和最有效的方法是什么。这些包裹号码来自一个巨大的文本文件,由地址、字符和字符串包围。当我使用php的reg exp,我没有得到任何准确的包裹,我想要的。我不确定如何提取包裹号码,因为它们有各种各样的方式。下面是文本的一个片段,我使用的正则表达式如下:
(包裹通常有各种各样的方式,这里列出的太多了,但这里有一些
-
130.1 8日至13日,
-
01 - 00603 - 0000 - 00002 - 0000 - c - 0410,
-
01 - 0 -真空断路- 0000 - 00002 - 0000 - c - 0410,
-
01 - 00603 - 0000 - 00002 - 0000 - bfb - 0101,
-
412001216.39 2-22,
-
412089214. 1 - 3.12
-
412001216.41 1 - 12.6,)
当前使用的php代码。
$pattern = '/[0-9A-Z.-]{9,30}/';
$reg_exp = preg_match_all($pattern, 'text below' , $matches, PREG_PATTERN_ORDER);
12020 200800031620700乔·杰克逊1东大街555号,纽约州12020 200800059632500412001216.41-1-11.2迈克尔乔丹555黄色ave ballston spa, ny 12020 200800007874700412001216.41-1-12.6布兰妮斯皮尔斯信箱139食管,ny 12429-0139 20080005779440042001216.47 -2-17栗色5 686 ballyy ave ballston spa, ny 12020 20080003166290042001216.48 -1-21 lady j gaga smit fornotx罗伯特999 high st gillmore spa, ny 12020 200800065014500[2001216.55-1-8] BILLY RODGER LIL JOSEPH A JR
我想你已经很接近了。上面示例代码中的所有包裹编号前面都有一个15位数字,因此您可以这样做:
$pattern = '/d{15} [dA-Z.-]{9,30}/';
或者如果你想要的是第二部分:
$pattern = '/d{15} ([dA-Z.-]{9,30})/';
这个模式避免了像你使用的模式那样意外抓取邮政编码。