Skip to content

4.1.3.字符串

龙腾道 edited this page Sep 30, 2021 · 1 revision

※ TOML 0.4 开始不再允许对 / 使用 \/ 转义写法

※ TOML 0.5 开始将字符串禁止直接包含的控制字符的范围,扩大至包含 U+007F

※ TOML 1.0 开始允许基础字符串、多行基础字符串中包括 Tab

※ TOML 1.0 开始,规定两种多行字符串均可以两个以内的引号结尾,而在此之前,这会造成字符串提前终止而构成语法错误

  • 基础字符串

    ※ TOML 0.3 开始支持用 \UXXXXXXXX 来表示 UCS-4,同时开始限定 \uXXXX 和 \UXXXXXXXX 的值必须是完整、有效的 Unicode 码点(0000D7FFE0000010FFFF

    ^
        "
        (
            [^\\"\x00-\x1F\x7F]
            |
            \t
            |
            \\(
                [\\"btnfr]
                |
                u[0-9A-Fa-f]{4}
                |
                U[0-9A-Fa-f]{8}
            )
        )*
        "
    $
    
  • 多行基础字符串(TOML 0.3 新增)

    ※ 开始标记后如果紧跟换行,那么这个换行会被剔除

    ※ 用 \ 来转义换行时,这个 \ 连同后面紧跟的所有换行、空格和 Tab 都会被剔除(TOML 0.5 开始,允许 \ 和换行之间存在空格;TOML 1.0 将支持扩大至 Tab)

    ※ 规范没有规定被保留的换行符最终会作为什么字符存在,而只是说“解析器可以相对灵活地解析成对所在平台有效的换行字符”,这意味着如果你希望精确地指定最终得到的换行符,而你的解析器又没有给出明确的约定或选项,那么你可能需要使用 \n 之类的转义写法

    ^
        """
        (
            [^\\"\x00-\x1F\x7F]
            |
            \t
            |
            \\(
                [\\"btnfr]
                |
                u[0-9A-Fa-f]{4}
                |
                U[0-9A-Fa-f]{8}
            )
            |
            (\\[ \t]*)?\r?\n
            |
            ""?
        )*
        """
    $
    
  • 字面量字符串(TOML 0.3 新增)

    ^
        '
        (
            [^'\x00-\x1F\x7F]
            |
            \t
        )*
        '
    $
    
  • 多行字面量字符串(TOML 0.3 新增)

    ※ 规范没有规定被保留的换行符最终会作为什么字符存在,而只是说“解析器可以相对灵活地解析成对所在平台有效的换行字符”,这意味着如果你希望精确地指定最终得到的换行符,而你的解析器又没有给出明确的约定或选项,那么你可能需要使用基础字符串或多行基础字符串,以便使用其中的转义写法

    ^
        '''
        (
            [^'\x00-\x1F\x7F]
            |
            \t
            |
            \r?\n
            |
            ''?
        )*
        '''
    $