Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/253.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 为装运注释构建正则表达式_Php_Regex_Fedex_Usps - Fatal编程技术网

Php 为装运注释构建正则表达式

Php 为装运注释构建正则表达式,php,regex,fedex,usps,Php,Regex,Fedex,Usps,这里有两个单独的注释或数据段,它们输入到单个订单注释数据中 我需要搜索运营商和个人跟踪号码的评论数据,但其格式因运营商而异 我们只使用2家运输公司USPS和联邦快递进行包裹跟踪。我想创建一个函数来提取运营商类型,并从这些评论中提取跟踪号码,将它们放在数据库中的各个位置,以备将来使用。我就是讨厌正则表达式 有没有人能告诉我正确的方向?此外,这都是在PHP中进行的如果格式始终相同,您可能需要使用和的组合 考虑到您的评论字符串中总是包含“USPS”或“FedEx”,只需在strpos中使用一个条件即可

这里有两个单独的注释或数据段,它们输入到单个订单注释数据中

我需要搜索运营商和个人跟踪号码的评论数据,但其格式因运营商而异

我们只使用2家运输公司USPS和联邦快递进行包裹跟踪。我想创建一个函数来提取运营商类型,并从这些评论中提取跟踪号码,将它们放在数据库中的各个位置,以备将来使用。我就是讨厌正则表达式


有没有人能告诉我正确的方向?此外,这都是在PHP中进行的

如果格式始终相同,您可能需要使用和的组合

考虑到您的评论字符串中总是包含“USPS”或“FedEx”,只需在strpos中使用一个条件即可。在这种情况下,您可能只想使用以下命令来确保大小写匹配:

Shipped 1-95080 via other USPS with tracking 1Z2216FE0348543895.

Shipped 1-95080 via other FedEx with tracking 729870539581, 729870539592.
至于跟踪号码,我找到了一个不需要正则表达式的解决方案,假设号码总是跟在“跟踪”后面,并用“,”分隔:

if (strpos(strtoupper($yourCommentString), 'USPS') !== false)
    $carrier = 'USPS';
else
    $carrier = 'FedEx';

如果格式总是相同的,您可能会使用和的组合

考虑到您的评论字符串中总是包含“USPS”或“FedEx”,只需在strpos中使用一个条件即可。在这种情况下,您可能只想使用以下命令来确保大小写匹配:

Shipped 1-95080 via other USPS with tracking 1Z2216FE0348543895.

Shipped 1-95080 via other FedEx with tracking 729870539581, 729870539592.
至于跟踪号码,我找到了一个不需要正则表达式的解决方案,假设号码总是跟在“跟踪”后面,并用“,”分隔:

if (strpos(strtoupper($yourCommentString), 'USPS') !== false)
    $carrier = 'USPS';
else
    $carrier = 'FedEx';

我听说你说讨厌regexp,但它对这个案子可能有用。 我写了一个可以帮助你的例子

第一句话:

$string = 'Shipped 1-95080 via other USPS with tracking 1Z2216FE0348543895, 1Z2216FE0348543895';

$start = strpos($string, 'tracking ') + strlen('tracking ');
$trackString = substr($string, $start);

$allTrack = explode(', ', $trackString);
第二个:

<?php
$string = 'Shipped 1-95080 via other USPS with tracking 1Z2216FE0348543895.';
preg_match('/.+(?P<ship_num>\d{1}\-\d+).+via other (?P<company>\w+) with tracking (?<tracking_code>[\w,\s]+)/', $string, $match);

if(strpos($match['tracking_code'], ',')!==false) {
    $match['tracking_code'] = array_map(function($index) {
        return trim($index);
    }, explode(',', $match['tracking_code']));
}

echo $match['ship_num']; // this echo prints '1-95080'
echo $match['company']; // this echo prints 'USPS'
print_r($match['tracking_code']); // this print_r prints an array with the value '1Z2216FE0348543895'

?>
此RegExp将捕获3个组:

?p\d{1}\-\d+ 此组将捕获一个数字\d、一个连字符\-和一些数字\d+

?p\w+ 此组将只捕获一些字母字符\w+

?[\w\s]+ 最后,此组将捕获一些空格字符\s、逗号和字母字符\w

在所有这些组中,我将它们分别命名为p


该工具可能对测试RegExp很有用。

我听说你说讨厌RegExp,但它对这种情况可能很有用。 我写了一个可以帮助你的例子

第一句话:

$string = 'Shipped 1-95080 via other USPS with tracking 1Z2216FE0348543895, 1Z2216FE0348543895';

$start = strpos($string, 'tracking ') + strlen('tracking ');
$trackString = substr($string, $start);

$allTrack = explode(', ', $trackString);
第二个:

<?php
$string = 'Shipped 1-95080 via other USPS with tracking 1Z2216FE0348543895.';
preg_match('/.+(?P<ship_num>\d{1}\-\d+).+via other (?P<company>\w+) with tracking (?<tracking_code>[\w,\s]+)/', $string, $match);

if(strpos($match['tracking_code'], ',')!==false) {
    $match['tracking_code'] = array_map(function($index) {
        return trim($index);
    }, explode(',', $match['tracking_code']));
}

echo $match['ship_num']; // this echo prints '1-95080'
echo $match['company']; // this echo prints 'USPS'
print_r($match['tracking_code']); // this print_r prints an array with the value '1Z2216FE0348543895'

?>
此RegExp将捕获3个组:

?p\d{1}\-\d+ 此组将捕获一个数字\d、一个连字符\-和一些数字\d+

?p\w+ 此组将只捕获一些字母字符\w+

?[\w\s]+ 最后,此组将捕获一些空格字符\s、逗号和字母字符\w

在所有这些组中,我将它们分别命名为p


该工具可能对测试RegExp很有用。

谢谢,这是用于确定载波的工具,我使用strstr提出了类似的方法。我现在只是想弄清楚追踪号码。很好,根据我的数据库,每一条消息都会遵循这种格式。一个非常聪明的简单方法。谢谢,这是确定承运人的工作,我用strstr想出了类似的方法。我现在只是想弄清楚追踪号码。很好,根据我的数据库,每一条消息都会遵循这种格式。一个非常聪明简单的方法。因为你讨厌奇妙的正则表达式,你还没有尝试过展示吗?不清楚729870539581、729870539592是否应该是两个独立的匹配项。也许一些基本的东西已经可以做了:。请参阅。有关使用此模式获取多个逗号分隔的匹配,请参阅。由于您讨厌奇妙的正则表达式,您还没有尝试显示?不清楚729870539581、729870539592是否应该是两个独立的匹配项。也许一些基本的东西已经可以做了:。请参阅。有关使用此模式获取多个逗号分隔的匹配项的信息,请参阅。