ft/rfc_abnf

此包已被废弃且不再维护。没有建议的替代包。

轻量级RFC ABNF语法和正则表达式模式

1.0.0 2022-08-13 01:43 UTC

This package is auto-updated.

Last update: 2024-04-13 05:14:29 UTC


README

这是一个不断增长的资源,总是处于变化之中,总会有需要调整的地方或者需要添加的新规范。这正是RFC的本质。

请记住这一点。

概述

此库提供两种概念上的服务

  1. 以模型形式捕获RFC规范
  2. 提供一种单一但灵活的方式,用于构建围绕任何规范ABNF表示的正则表达式模式

以模型形式捕获RFC规范

模型必须遵守以下规则

  • 所有基于RFC规范的类都继承自FT\RFC_ABNF\Core

  • 类的名称将是规范名称

  • 类必须自文档化。类方法名称将与规范语法中提供的ABNF规则标识符名称相同

    例如,如果规范表示以下规则

    OWS = *(SP / HTAB )
    time-of-day = hour ':' minute ':' second
    

    它们将在类中体现为这样

    public static function OWS() : ABNF;
    public static function TIME_OF_DAY() : ABNF;
  • 所有ABNF规则类方法将返回一个FT\RFC_ABNF\ABNF对象

  • 所有ABNF规则类方法将是静态的

  • 此库的目标不是在模型中捕获所有规范ABNF规则,而是捕获规范ABNF的基本构建块,以便能够使用它们构建模式。

    例如,在RFC9110中有一个针对Trailer的规则

    Trailer = [ field-name *( OWS "," OWS field-name ) ]
    

    这样的规则通常不会被关注,因为你可以使用提供的field-nameOWS的基本规则构建正则表达式。

    向前看,目标是便于实现规范中提到的所有规则

提供一种单一灵活的方式,用于构建与规范相关的正则表达式模式

  • 您可以使用以下两种模式之一构建相应RFC规范的正则表达式

    • 构建器方法模式

      (new RegexBuilder(Specs::RFC9110))
          ->with("DQUOTE")
          ->group(
              (new RegexBuilder(Specs::RFC9110))
                  ->with("qdtext")
                  ->text("|")
                  ->with("quoted-pair")
          )
          ->with("DQUOTE")
          ->build()
    • 使用模板变量的ABNF表达式模式

      (new RegexBuilder(Specs::RFC9110))
          ->abnf(":dquote (?::qdtext|:quoted-pair)* :dquote")
          ->build();

    查看wiki以获取完整文档