如果我有这样的字符串:
TAX ID NO. 01.000.589.0.055.000
我的目标是,我想获得tax
短语后面的整数,即010005890055000
到目前为止,我是这样写的
/(tax id no)\s*[^A-Za-z0-9]?\s*\K\d+/i
但是仍然不正确,因为有时用户会这样写:
TAX ID. 01.000.589.0.055.000 or
TAX ID : 01.000.589.0.055.000 or
TAX ID 01.000.589.0.055.000 or
TAX: 01.000.589.0.055.000
甚至用户也直接写到一个完美的整数
TAX ID NO. 010005890055000
请告知
这是我所有的可能性:
未格式化
JL。 CACING RT 007/008 JAKARTA JAKARTA TIMUR 13910印度尼西亚税号010005890055000
格式化
JL。 CACING RT 007/008 JAKARTA JAKARTA TIMUR 13910印度尼西亚税号01.000.589.0.055.000
使用不同的tax
短语
JL。 CACING RT 007/008雅加达帖木尔CAKUNG 13910印度尼西亚税010005890055000
JL。 CACING RT 007/008雅加达帖木尔CAKUNG 13910印尼税号01.000.589.0.055.000
JL。 CACING RT 007/008 CAKUNG,雅加达帖木尔13910印度尼西亚税号。 010005890055000
在句子开头
税号。 010005890055000,JL。 CACING RT 007/008印度尼西亚雅加达帖木尔13910卡孔
税号。 01.000.589.0.055.000,JL。 CACING RT 007/008印度尼西亚雅加达帖木尔13910卡孔
非常感谢您...
答案 0 :(得分:1)
您可以利用此:
/(?:tax\s*(?:id\s*)?).*?(\d[\d\.]+)/i
第一组检查tax
,其中id
是可选的。然后,它将获取第一个数字和所有数字以及.
并将其分组在$1
答案 1 :(得分:1)
看起来您唯一的一致关键字是TAX
,因此您可以使用正则表达式~TAX.*?\.? *?([\d\.-]+)~i
来捕获数字(带点和破折号),然后去除非数字(如果需要)。这是一个示例测试:
$data = "JL. CACING RT 007/008 CAKUNG, JAKARTA TIMUR 13910 INDONESIA TAX ID NO. 010005890055000
JL. CACING RT 007/008 CAKUNG, JAKARTA TIMUR 13910 INDONESIA TAX ID NO. 01.000.589.0.055.000
JL. CACING RT 007/008 CAKUNG, JAKARTA TIMUR 13910 INDONESIA TAX 010005890055000
JL. CACING RT 007/008 CAKUNG, JAKARTA TIMUR 13910 INDONESIA TAX ID 01.000.589.0.055.000
JL. CACING RT 007/008 CAKUNG, JAKARTA TIMUR 13910 INDONESIA TAX ID. 010005890055000
TAX ID. 010005890055000 , JL. CACING RT 007/008 CAKUNG, JAKARTA TIMUR 13910 INDONESIA
tax ID. 01.000.589.0.055.000 , JL
TAX ID. 01.000.589.0.055.000 , JL. CACING RT 007/008 CAKUNG, JAKARTA TIMUR 13910 INDONESIA
JL. CAKUNG CILINCING KP BARU RT 007/008 CAKUNG BARAT, CAKUNG, JAKARTA TIMUR 13910 INDONESIA TAX ID NO. 01.109.421.6-902.000";
foreach (explode("\n", $data) as $line) {
preg_match("~TAX.*?\.? *?([\d\.-]+)~i", $line, $m);
echo preg_replace("~\D~", "", $m[1]) . "\n";
}
输出:
010005890055000
010005890055000
010005890055000
010005890055000
010005890055000
010005890055000
010005890055000
010005890055000
011094216902000
答案 2 :(得分:1)
您可以使用preg_replace除去所有数字。
preg_replace('/[^\d]/', '', $str);
要回答新要求: 使用substr和strpos删除不超过“ tax”的部分。
$arr = ["TAX ID. 01.000.589.0.055.000 or",
"TAX ID : 01.000.589.0.055.000 or",
"TAX ID 01.000.589.0.055.000 or",
"TAX: 01.000.589.0.055.000",
"ARU RT 007/008 CAKUNG BARAT, CAKUNG, JAKARTA TIMUR 13910 INDONESIA TAX ID NO. 010005890055000"];
foreach($arr as $str){
echo preg_replace('/[^\d]/', '', substr($str, stripos($str, "tax"))) . "\n";
}
答案 3 :(得分:1)
您可以使用此正则表达式,其中TAX部分除外,我已将介于税和数字之间的所有内容设为可选。使用此正则表达式并捕获group1
/tax(?:.*?)\s+([\d.]+)/i
一旦获得了数字和点部分,就从其中删除所有点字符。
这是示例php代码,
$arr = ["TAX ID NO. 01.000.589.0.055.000","TAX ID. 01.000.589.0.055.000","TAX ID : 01.000.589.0.055.000","TAX ID 01.000.589.0.055.000","TAX: 01.000.589.0.055.000", "TAX ID NO. 010005890055000"];
foreach ($arr as &$value) {
preg_match('/tax(?:.*?)\s+([\d.]+)/i', $value, $matches);
echo $value . " --> " . preg_replace('/\./','',$matches[1]) . "\n";
}
这将打印以下输出,
TAX ID NO. 01.000.589.0.055.000 --> 010005890055000
TAX ID. 01.000.589.0.055.000 --> 010005890055000
TAX ID : 01.000.589.0.055.000 --> 010005890055000
TAX ID 01.000.589.0.055.000 --> 010005890055000
TAX: 01.000.589.0.055.000 --> 010005890055000
TAX ID NO. 010005890055000 --> 010005890055000