0

我有一个巨大的字符串,我需要分开。它的某些部分会有所不同,而有些则不会。我面临的困难是我找不到符号或找不到要与 preg_replace 一起使用的匹配项,因为它都是字母数字的。这是字符串:

$str = "01;01;283;Póvoa do Vale do Trigo;15315100 01;01;249;Alcafaz;;;;;;;;;;;3750;011;AGADÃO 01;01;2504;Caselho;;;;;;;;;;;3750;012;AGADÃO _ 15 '' ghdhghg 01;01;25155;Corga da Serra;;;;;;;;;;;3750;013;AGADÃO 01;01;252;Foz;;;;;;;;;;;3750;014;AGADÃO 01;01;253;Guistola;;;;;;;;;;;3750;015;AGADÃO 01;01;254;Guistolinha;;;;;;;;;;;3750;016;AGADÃO 01;01;255;Lomba;;;;;;;;;;;3750;017;AGADÃO AND IT CONTINUES ...";

因此,如果我们查看字符串 ( 01;01;283;Póvoa do Vale do Trigo;15315100) 的第一部分,我想要保留的是:

01;01;283;

并匹配:

;Póvoa do Vale do Trigo;15315100

并替换为空格。

最后我想要这个:

01;01;283 01;01;249 01;01;2504; 01;01;25155 01;01;252 01;01;253 01;01;254 01;01;255

在我更换后:

;Póvoa do Vale do Trigo;15315100 ;Alcafaz;;;;;;;;;;;3750;011;AGADÃO ;Caselho;;;;;;;;;;;3750;012;AGADÃO _ 15 '' ghdhghg ;Corga da Serra;;;;;;;;;;;3750;013;AGADÃO ;Foz;;;;;;;;;;;3750;014;AGADÃO ;Guistola;;;;;;;;;;;3750;015;AGADÃO ;Guistolinha;;;;;;;;;;;3750;016;AGADÃO ;Lomba;;;;;;;;;;;3750;017;AGADÃO

经过""

对不起,我是葡萄牙人的任何拼写错误。

4

2 回答 2

0

这是代码:

$str = "01;01;283;Póvoa do Vale do Trigo;15315100 
01;01;249;Alcafaz;;;;;;;;;;;3750;011;AGADÃO 
01;01;2504;Caselho;;;;;;;;;;;3750;012;AGADÃO _ 15 '' ghdhghg 
01;01;25155;Corga da Serra;;;;;;;;;;;3750;013;AGADÃO 01;01;252;Foz;;;;;;;;;;;3750;014;AGADÃO 
01;01;253;Guistola;;;;;;;;;;;3750;015;AGADÃO 01;01;254;Guistolinha;;;;;;;;;;;3750;016;AGADÃO 
01;01;255;Lomba;;;;;;;;;;;3750;017;AGADÃO AND IT CONTINUES ...";

$str2 = preg_replace('/^([0-9]+;[0-9]+;[0-9]+).*[\r\n]+/m', '$1 ', $str."\n");

echo $str2;

输出:

01;01;283 01;01;249 01;01;2504 01;01;25155 01;01;253 01;01;255 
于 2013-10-23T00:28:27.320 回答
0

你可以试试这个:

$result = preg_replace('~(?:[0-9]+;?){3}\K;.+?(?=(?>[0-9]+;){3}|$)~s', ' ', $str);

这个想法是匹配这 3 个数字并使用 将它们从匹配结果中删除\K。然后,你匹配所有.+?直到接下来的 3 个数字或字符串的结尾。

您可以尝试另一种模式:

$result = preg_replace('~;[^0-9].+?(?=(?>[0-9]+;){3}|$)~s', ' ', $str);
于 2013-10-23T00:32:43.163 回答