有人能帮我解决这个问题吗?我也尝试了很多regexp和substr,但我无法解决。我的要求是在1、28、48、62等之后添加|登录字符串!我正在为我们的crm将一个文本文件转换为psv格式,有人能帮我吗?问候
$final = preg_replace("/^(.{0})/", "$1|", $line[0]);
这个代码每个字符串只匹配一个位置,我想替换为6-10个特定的列,我也尝试过,但不能使用
$final = preg_replace("/^(.{0}{28}{48})/", "$1| $2| $3|", $line[0]);
但我在这个表达式中的解决方案如果有效再举一个例子输入:
$string = "80293066640226135465 NRIC 011064608711 HAZRY BIN ABDULLAH 0138258856 LOT 7083,LORONG 6B1 JLN MATANG TAMAN MATANG JAYA 93050,KUCHING,SAR 93050 SAR ABO TAYANGAN HEBAT FOR VALUE PACK,ABO TAYANGAN HEBAT HD,AOTG + CATCH UPMALAY URB4929 1 2015090404/09/2015 04/11/2015 138.0000 BASIC FAMILY HD PACKAGE,HD SERVICES FOR VALUE PACK,RECORDING (XTV) FOR
";期望输出:
80293066|640226135465|NRIC|011064608711|HAZRY BIN ABDULLAH||0138258856||||$ $ $LOT 7083,LORONG 6B1 JLN MATANG$|TAMAN MATANG JAYA $93050$,KUCHING,SAR $SAR $||ABO TAYANGAN HEBAT FOR VALUE PACK,ABO TAYANGAN HEBAT HD,AOTG + CATCH UP|MALAY|URB4929||1|20150904|04/09/2015|04/11/2015|138.0000||BASIC FAMILY HD PACKAGE,HD SERVICES FOR VALUE PACK,RECORDING (XTV) FOR|||
所以有些字段会有|符号,而有些字段则会有$。
您可以使用以下语法,也许还有更简单的方法,点的数量与放置"|"符号所需的字符数量相匹配。
preg_replace("/^(........)(.........)(...................)/", "|$1|$2|$3", $line[0]);
在vi中,我使用
:%s/^'(........')'(.........')'(...................')/|'1|'2|'3/g
也许您有这样的输入:
973293273 john joe downtown london uk 6499273
由于您有一个固定长度的文件,因此可以使用以下模式:
^(.{13})(.{15})(.{20})(.{15})$
并用类似的东西代替它
|$1|$2|$3|$4
演示
如果每一行每列都有固定的大小(第一列10个字符,第二列20个字符等),请注意这里固定和最大之间的差异,每一列都必须具有完全相同的长度
function char_replace($input , $replace , $position)
{
if(is_array($position))
{
$output = $input;
foreach($position as $character_to_change)
{
$tmp = substr($output , 0 , $character_to_change -1);
$tmp .= $replace;
$tmp .= substr($output , $character_to_change );
$output = $tmp;
}
return $output;
}
else
{
$output = substr($input , 0 , $position -1);
$output .= $replace;
$output .= substr($input , $position );
return $output;
}
}
//example with array
$string = "12345";
echo char_replace($string,"|",array(2,4));
//example
$string = "abcdef";
echo char_replace($string,"|",2);
这个功能可以很好地帮助你。这样做:$result=char_replace(char_replace,$input,"|",48),"|",12);或者只使用for 运行
EDIT:现在使用多位置和单int的数组