的“块”我是应该分析有类似这样的格式上传文本文件PHP应用程序:PHP PCRE匹配文本
| | | |
| -----------------------------------------------------|
| 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 |
| ---------------------------------------------------------------|
我需要做的基本上是隔离每个“阻止“自己以相同的顺序,所以我可以循环他们一个接一个。 A“解决方案”可以做
preg_split("/\n{4,}/", $text);
但是会产生unwated的结果,如果提交的文本的人决定了不必要的换行不属于并删除它们。我尝试过使用preg_match_all(),但是自从我做了任何真正的正则表达式之后已经有很多年了,所以我无法想出一个可用的解决方案。
“块”的第一行总是包含|和空格,但字段可能包含文本。 “块”的最后一行始终是一个管道,后面跟着一个空格,破折号填充行,以|结尾。
我想如果不能可靠地上' '/ \ N {2,} /''或'分裂 '/ \ N(\ S * \ n)的+ /'',则不能可靠地分离的。如果一个“表格”在下一个没有空行的情况下出现,那么也可能有两个连续的表格具有相同的列号和宽度,在这种情况下,它们甚至可能无法被人工区分。 –
如果有可靠的标题行,则可以检测块。但是你的样本太抽象了。 – mario
与标题没有一致性,有些块有标题,有些则没有标题。内容是动态的(不同的集合,语言等),但块的大小是恒定的。就像在上面的例子中那样,这是确切的“预期”输入。 –