PHP-带有缩进的解析器文件

PHP-带有缩进的解析器文件,php,indentation,Php,Indentation,我有一个具有下一个结构的文件: concept [at0000] -- Blood Pressure language original_language = translations = author = ["organisation"] = ["email"] = >

我有一个具有下一个结构的文件:

concept [at0000] -- Blood Pressure language original_language = translations = author = ["organisation"] = ["email"] = > accreditation = > > description original_author = ["organisation"] = ["email"] = ["date"] = > details = purpose = 概念 [at0000]——血压 语言 原始语言= 翻译= 作者= [“组织”]= [“电子邮件”]= > 认证= > > 描述 原作者= [“组织”]= [“电子邮件”]= [“日期”]= > 详情= 目的=
我需要打开并解析这个文件,但我必须承认每行的缩进,因为缩进表示层次结构。在PHP中,有没有办法逐行分析缩进,无论是行的开头、中间还是结尾?

您可以使用
ltrim
rtrim
函数

例如,使用以下代码:

$line = '    concept';

echo strlen(ltrim($line));
echo strlen($line);
可以计算行首有空格和无空格的字符串长度

但是我不知道你的意思是你想计算线中间的凹痕。在这种情况下,您应该使用
substr
函数转到预期缩进的位置,然后再次使用
ltrim
和strlen计算子字符串开头的空格

您可能还希望在代码中包含非ASCII字符的情况下使用

对于解析行,只需使用函数

很简单:谁提供了如此糟糕的数据结构来解析呢。 2014年。到处都是XML和轻量级JSON。 我们得到了什么?甚至不是CSV:)

//咆哮

可能适合使用固定列宽的解析器:

基本上,您可以使用
$lines=file(“file.txt”)获得行

然后就是检测每行前面的空格或制表符

更新

结果证明这个“数据”有一个结构。 ISO 13606-2中描述了数据结构“原型定义语言”(ADL)

  • 本文件包含第8章中的语法说明
  • 您可以使用此语法来构造解析器
  • 解析缩进是最小的问题。正确的数据结构才是真正的任务
  • 快乐的测试写作-这将是一个很大的工作。。。被警告
我还要指出OpenEHR

  • OpenEHR使用Java和Eiffel作为编程语言
  • ADL解析器是用Java实现的
  • 你可以在
这是Ruby中的解析器ADL v1.4:

这将使您非常接近解决方案。
希望这有点帮助。

ADL没有PHP解析器。但是,可以使用CKM()或原型编辑器()将ADL转换为XML


您应该在PHP中使用XML。

解析该文件的结果应该是什么?如果一致使用缩进,肯定会有助于词法分析和解析。你自己试过什么吗?因为提出一个文件方案并期望编写一个解析器有点不合理。当然,该文件不是随机产生的,并且有一个参考实现或现有解码器。否则就转换到YAML,不要重新发明这条船。这是某种标准的标记语言吗?可能已经有了语法分析器。@PatrickQ分析的结果基于其他算法,在我的例子中,我只需要知道层次结构的缩进深度。@AlliterativeAlice没有语法分析器,事实上,我正在创建一个PHP类来使用extends。这属于基于ISO 13606-2的电子健康信息交换标记标准。此解析器用于“读取”基于标准ISO 13606-2的临床信息电子交换原型模型。最初使用这种类型的结构(版本1.4)创建,版本1.5使用XML,但作为本标准的规则,开发支持这两个版本的应用程序是必要的。我们正在开发一个“开源”类,因为我们扩展了该标准的使用,并且是在PHP中完成的。我更新了我的答案,添加了一些关于ADL的注释和指向OpenEHR的ADLParser的指针project@Jens-安德烈·科赫关于语法,没有问题,因为概念很清楚。java中的解决方案在采用该标准时并不有效,因此该实现的替代方案更有效,可以提供更易于使用和实现项目的类。感谢您的帮助。该语法(ADL)有一个规范的XML版本,可以从许多工具、CKM、原型编辑器等生成。