我有一个 PHP 应用程序,它应该解析上传的文本文件,其格式类似于:
| | | |
| -----------------------------------------------------|
| Sample | Data | |
| -----------------------------------------------------|
| Sample | Data | |
| -----------------------------------------------------|
| Sample | Data | |
| -----------------------------------------------------|
| Accepts | |
| --------------------------------------------------------|
| All | Yes |
| --------------------------------------------------------|
| More | Yes |
| --------------------------------------------------------|
| | | Years | | |
| ---------------------------------------------------------------|
| 1998 | 1999 | 2000 | 2001 | 2002 |
| ---------------------------------------------------------------|
| 2003 | 2004 | 2005 | 2006 | 2007 |
| ---------------------------------------------------------------|
| 2008 | 2009 | 2010 | 2011 | 2012 |
| ---------------------------------------------------------------|
我需要做的基本上是以相同的顺序单独隔离每个“块”,这样我就可以一个一个地循环它们。一个“解决方案”可能正在做
preg_split("/\n{4,}/", $text);
但是,如果提交文本的人认为不必要的换行符不属于并删除它们,那么这将产生意想不到的结果。我尝试使用 preg_match_all(),但是自从我做任何真正的正则表达式以来已经有好几年了,所以我想不出一个可用的解决方案。
“块”的第一行总是包含 | 和空格,但字段可能包含文本。“块”的最后一行始终是一个管道,后跟一个空格,用破折号填充行,以 | 结尾。