PHP preg_replace正则表达式将数字与其余数字分开

时间:2013-10-23 00:03:29

标签: php regex preg-replace expression

我有一个巨大的字符串,我需要分开。它的某些部分有所不同,有些则没有。我面临的困难是,我无法找到一个符号或其他东西,我无法找到我想用于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

""

对不起任何拼写错误我是葡萄牙语。

2 个答案:

答案 0 :(得分: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 

答案 1 :(得分: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);