PHP解析文本区

时间:2017-06-22 12:18:55

标签: php parsing post search

我一直在开发一个PHP网页来帮助我解析大量数据。它有效,但我希望它更健壮。

因此,在我的主页上,我有一个文本区域,您可以根据需要复制所需的信息。您单击提交将数据发布到处理它的页面

这是当前解析它的代码

 foreach ($textAr as $line) 


    if (substr( $line, 0, 2 ) == "IN") 
    {
        $line2 = $line;
        $textAr2 = explode("\r", $line2);
            $textAr2 = array_filter($textAr2, 'trim'); // remove any extra characters left behind
        foreach ($textAr2 as $line2) 
            {
                $length = strlen($line2);
                if ( $length == 10)
                {
                    if (substr( $line2, 0, 2 ) == "IN") 
                    {
                        $count++;
                        $line3 = ltrim($line2, 'IN');

                        echo $line3 . ",";
                    }

                }


            }
    }

我输入的数据始终格式为

names   dates times summary stuffs      infostuffs  stats   names   dates   IN*somenumber
names    dates  times summary stuffs        infostuffs          names   dates   IN*somenumber
names   dates times summary stuffs      infostuffs  stats   names   dates   IN*somenumber
names   dates times summary stuffs      infostuffs  stats       dates   IN*somenumber
names   dates times summary stuffs      infostuffs  stats   names   dates   IN*somenumber
names   dates times summary stuffs      infostuffs  stats   names   dates   IN*somenumber
 names  dates times summary stuffs      infostuffs  stats   names   None    IN*somenumber
names   dates times summary stuffs      infostuffs  stats   names   dates   IN*somenumber

这很有效,我知道它不是最有效的,但它有效。 但是我想让它更强大,而且由于缺乏编码知识而导致我失败。它总是会搜索以" IN"开头的字符串。之后有8个数字。之后,它将IN剥离并将其放入一连串的数字中,如88888888,88888888,88888888,88888888,88888888,88888888, 当我将它用于csv的东西时,这是至关重要的

我希望它能够处理其他格式 这里有几个例子,它可以处理我想要它的一些事情 如果我添加另一个" IN * somenumber"在格式的末尾,它没有解析它

names   dates times summary stuffs      infostuffs  stats   names   dates   IN88888888 IN88888888 

在上面的例子中它将返回的是" 88888888,"完全错过了第二个

我希望它解析的其他项目是

IN88888888 
IN88888888 
IN88888888 
IN88888888 
IN88888888 
IN88888888 

完成输出后

88888888,
IN88888888 
IN88888888 
IN88888888 
IN88888888 
IN88888888

任何帮助或建议都会很棒我一直试图在w3schools上搜索,就像只使用通配符的通用搜索功能一样但是没有提出任何帮助或建议 这是我认为理想的

do util end of string(Posted textarea)
   $output = search("IN" . any8numbers);
   echo $output .  ",";

Edit1:根据建议,这里有一些我做过的事情 我尝试使用strrpos()作为其不区分大小写但不确定它正是我需要的,因为它只找到第一次或最后一次(根据您使用的版本) 我也试图使用更多的数据爆炸,并迅速复杂化。我认为这会使问题变得更糟,因为如果我想改变内容,将来更难以改变,因为每次爆炸都依赖于上述内容来正确解析。如果它没有那么一切都搞砸了。

我通常使用基本回声调试此代码,因为公司笔记本电脑只允许使用notepad ++而PHP服务器不提供日志,除了存储和运行页面之外我无法访问它

也许我应该把文本区域分成一个单独的字符串数组,然后测试arry中的每个项目是否以' IN'剥掉它。

其他建议?

0 个答案:

没有答案