YML语法整理

前言

今天配置 YML 中,我的 MySQL 数据库密码是包含感叹号,发现 YML 根本就不支持,研究了一会才发现如何配置,正好借着这个机会,整理一下 YML 文件的语法规则,便于以后翻阅

规则

字符串

YAML 字符串可以用单引或双引号来打包。某些情况下,它们也可以不加引号

1
2
3
4
5
string in YAML

'A singled-quoted string in YAML'

"A double-quoted string in YAML"

引号十分有用,当字符串起始或结束于“一或多个空格”的话,因为在进行解析式,未加引号的字符串将被两头清空格(trimmed)。当字符串包括特殊的或保留的字符时,使用引号是必须的

当使用单引号字符串时,内容中的任何单个  '  必须使用两次以进行转义

1
"A single quote ' inside a single-quoted string"

字符串中包含以下内容时必须使用引号。虽然你可以使用双引,对于这些字符使用单引更为方便,可以避免被迫使用任何 \ 来进行转义:

  • :, {, }, [, ], ,, &, *, #, ?, |, -, <, >, =, !, %, @, ```

双引号提供了一种用于表达任意字符串的方式,使用  \  来转义字符或排序。例如,当你需要内嵌  \n  或 Unicode 字符到一个字符串中时,它非常有用:

1
"A double-quoted string in YAML\n"

如果字符串包含下列控制字符(control characters),必须使用双引进行转义:

  • \0, \x01, \x02, \x03, \x04, \x05, \x06, \a, \b, \t, \n, \v, \f, \r, \x0e, \x0f, \x10, \x11, \x12, \x13, \x14, \x15, \x16, \x17, \x18, \x19, \x1a, \e, \x1c, \x1d, \x1e, \x1f, \N, \_, \L, \P

最后,还有其他一些场合需要引号,不管你使用双引还是单引:

  • 当字符串是 truefalse (否则,它将被当作布尔值对待);
  • 当字符串是 null~ (否则,它会被认为是 null 值);
  • 当字符串看起来像数字,比如整型 (如 2, 14, 等等), floats (e.g. 2.6, 14.9) 以及指数数字 (如 12e7, 等等) (否则,它将被当作数字值对待);
  • 当字符串看起来像日期 (如 2014-12-31) (否则,它将被自动转换成 Unix timestamp)。

数字

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# an integer / 整形
12

# an octal / 八进制
014

# an hexadecimal / 十六进制
0xC

# a float / 浮点
13.4

# an exponential number / 指数数字
1.2e+34

# infinity / 无限大
.inf

Nulls

YAML 中的 null 可以被表达为 null or ~

布尔值

YAML 中的布尔值可以被表达为 true and false

日期

YAML 使用 ISO-8601 标准来表达日期:

1
2
3
4
2001-12-14T21:59:43.10-05:00

# simple date / 简单日期
2002-12-14

集合

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 顺序型

- JAVA
- Perl
- Python
# 或者
[PHP, Perl, Python]

# 映射型
PHP: 5.2
MySQL: 5.1
Apache: 2.2.20
# 或者
{ PHP: 5.2, MySQL: 5.1, Apache: 2.2.20 }

# 合在一起
'symfony 1.0': { PHP: 5.0, Propel: 1.2 }
'symfony 1.2': { PHP: 5.2, Propel: 1.3 }

相关

作者

孙博文

发布于

2020-04-02

更新于

2021-07-18

许可协议

评论