PHP解析文本区域中的特定字符串
我一直在开发一个PHP网页来帮助我解析大量数据。它的工作,但我希望它更强大 所以在我的主页上有一个文本区域,你可以复制你想要的任何信息。单击“提交”将数据发布到处理该数据的页面中 下面是当前解析它的代码PHP解析文本区域中的特定字符串,php,parsing,post,search,Php,Parsing,Post,Search,我一直在开发一个PHP网页来帮助我解析大量数据。它的工作,但我希望它更强大 所以在我的主页上有一个文本区域,你可以复制你想要的任何信息。单击“提交”将数据发布到处理该数据的页面中 下面是当前解析它的代码 foreach ($textAr as $line) if (substr( $line, 0, 2 ) == "IN") { $line2 = $line; $textAr2 = explode("\r", $line2);
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个数字的字符串。之后,它将输入和输出剥离,并将其放入连续的数字字符串中,如888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888,
当我使用它来处理csv内容时,它是至关重要的
我想让它处理其他格式
这里有几个例子是一些它无法处理的事情,我希望它能够处理
从上面看,如果我在格式末尾添加另一个“IN*somenumber”,它不会解析它
names dates times summary stuffs infostuffs stats names dates IN88888888 IN88888888
在上面的示例中,它将返回“8888888”,完全缺少第二个
我想让它解析的另一项是
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 . ",";
编辑1:根据建议,我做了一些事情
我尝试使用strrpos()作为其大小写,但不确定它是否正是我所需要的,因为它只找到第一个或最后一个出现的内容(基于您使用的版本)
我也尝试过使用更多的“爆炸成阵列”,这很快就会变得复杂。我相信这会让问题变得更糟,因为如果我想更改内容,那么将来更难更改内容,因为每次爆炸都依赖于上面的内容来正确解析。如果没有,那么一切都会变得一团糟
我通常用基本的echos来调试这段代码,因为公司的笔记本电脑只允许notepad+,PHP服务器不提供日志,除了存储和运行页面之外,我没有访问它的权限
也许我应该把文本区域分解成一个单独的字符串数组,然后测试数组中的每个项目是否以“in”开头,然后去掉它
其他建议?请考虑与我们分享您迄今为止为达到预期效果所做的努力。很明显,你对如何编写代码有一个想法——展示你尝试过的东西,我们可以从中提供帮助。好吧,我不会说我很棒,这花了我相当长的时间制作,它实际上是基于保存它然后重试的反复尝试。我编写PHP代码已经有几年了,我尝试使用下面的函数,但我认为它并不完全适合使用,因为基于W3页面,它只找到第一次或最后一次出现,我不能使用通配符
strrpos()
我无法告诉您我在以前的尝试中使用的确切代码,因为我一直在覆盖它,我也尝试过使用更多的分解数组,但它没有做任何事情看起来像正则表达式和preg\u match\u all
的工作。使用正则表达式从字符串中剥离数字是一项相当简单的任务。我甚至不知道正则表达式可以在PHP中使用。然后我可以很容易地实现它,因为我的公司和我每天都使用regex。将研究这一点是否有任何函数可以将文本区域放入一个巨大的数组中?我目前使用“explode”,但我的主要问题是它没有捕获回车符,因为我将分隔符设置为一个空格,然后我必须重新遍历它以捕获回车符。请考虑与我们分享您迄今为止为实现所需结果所做的尝试。很明显,你对如何编写代码有一个想法——展示你尝试过的东西,我们可以从中提供帮助。好吧,我不会说我很棒,这花了我相当长的时间制作,它实际上是基于保存它然后重试的反复尝试。我编写PHP代码已经有几年了,我尝试使用下面的函数,但我认为它并不完全适合使用,因为基于W3页面,它只找到第一次或最后一次出现,我不能使用通配符strrpos()
我无法告诉您我在以前的尝试中使用的确切代码,因为我一直在覆盖它,我也尝试过使用更多的分解数组,但它没有做任何事情看起来像正则表达式和preg\u match\u all
的工作。使用正则表达式从字符串中剥离数字是一项相当简单的任务。我甚至不知道正则表达式可以在PHP中使用。然后我可以很容易地实现它,因为我的公司和我每天都使用regex。将研究这一点是否有任何函数可以将文本区域放入一个巨大的数组中?我目前使用“explode”,但我的主要问题是它没有捕获回车符,因为我将分隔符设置为一个空格,然后我必须重新遍历它以捕获回车符