如何在字符串php中的几个空格后添加多个管道,逗号等

时间:2015-11-11 08:28:11

标签: php regex

任何人都可以帮我解决这个问题,我也尝试了很多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|||

所以有些字段会有|标志,有些人会有$。

3 个答案:

答案 0 :(得分:2)

您可以使用以下语法,也许还有更简化的方法,点数与您需要放置“|”的字符数相匹配符号

preg_replace("/^(........)(.........)(...................)/", "|$1|$2|$3", $line[0]);
在我使用的vi中

:%s/^\(........\)\(.........\)\(...................\)/|\1|\2|\3/g

答案 1 :(得分:2)

也许你有这样的输入:

973293273    john joe       downtown london uk  6499273        

由于您有一个固定长度的文件,因此可以使用此模式:

^(.{13})(.{15})(.{20})(.{15})$

并将其替换为:

|$1|$2|$3|$4

Demo

答案 2 :(得分:1)

每行每列的大小是否固定(第一列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

运行它

编辑:现在使用数组处理多个位置以及单个int