Php 为装运注释构建正则表达式
这里有两个单独的注释或数据段,它们输入到单个订单注释数据中 我需要搜索运营商和个人跟踪号码的评论数据,但其格式因运营商而异 我们只使用2家运输公司USPS和联邦快递进行包裹跟踪。我想创建一个函数来提取运营商类型,并从这些评论中提取跟踪号码,将它们放在数据库中的各个位置,以备将来使用。我就是讨厌正则表达式Php 为装运注释构建正则表达式,php,regex,fedex,usps,Php,Regex,Fedex,Usps,这里有两个单独的注释或数据段,它们输入到单个订单注释数据中 我需要搜索运营商和个人跟踪号码的评论数据,但其格式因运营商而异 我们只使用2家运输公司USPS和联邦快递进行包裹跟踪。我想创建一个函数来提取运营商类型,并从这些评论中提取跟踪号码,将它们放在数据库中的各个位置,以备将来使用。我就是讨厌正则表达式 有没有人能告诉我正确的方向?此外,这都是在PHP中进行的如果格式始终相同,您可能需要使用和的组合 考虑到您的评论字符串中总是包含“USPS”或“FedEx”,只需在strpos中使用一个条件即可
有没有人能告诉我正确的方向?此外,这都是在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是否应该是两个独立的匹配项。也许一些基本的东西已经可以做了:。请参阅。有关使用此模式获取多个逗号分隔的匹配项的信息,请参阅。