次のような形式のアップロードされたテキストファイルを解析することになっている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 |
| ---------------------------------------------------------------|
私がする必要があるのは、基本的に各「ブロック」を同じ順序で単独で分離することです。これにより、それらを1つずつループさせることができます。「解決策」は
preg_split("/\n{4,}/", $text);
ただし、テキストを送信する人が不要な改行が属していないことを決定し、それらを削除した場合、それは不当な結果を生み出します。preg_match_all()を試してみましたが、実際の正規表現を実行してから何年も経っていたため、使用可能な解決策を思い付くことができませんでした。
「ブロック」の最初の行には常に|が含まれます とスペースがありますが、フィールドにはテキストが含まれる場合があります。「ブロック」の最後の行は常にパイプの後にスペースが続き、行を埋めるためにダッシュが続き、|で終わります。