'
, "
, \
和转义字符比如 \n
, \r
推荐的 yaml string 格式用 “, "
, |
这 3 种形式。
|
或者 |-
是不需要考虑 yaml 转义的格式,类似 golang 中的 `
|
会保留最后的换行, |-
不会"
是支持转义字符的格式
\n
会变成换行"
需要转义#
, :
等
'
, "
hex dump
一下,各种语言的字符串变量通常还有自己的转义, print 打印出来的字符可能还会被 shell 本身处理,会让事情变得更加复杂
举一些常见的例子:
|
或者 |-
"
multipart/form-data
的包。它的每一行是要以 \r\n
(hex 0d
0a
) 结尾的。
一个错误的写法:(可以关注其中的 0a
)
"
来表示此包。需要做的事情是:
"
\n
会变成换行|
match
方法等,不幸的是正则也需要转义。推荐:
|
r'
或者 r"
[
: product:\['c="a"'\]
'
"
, 所以必须要转义, 选择 "
的方式,需要转义 "
和 \
\
: product:\\['c="a"'\\]
"
: product:\\['c=\"a\"'\\]
"product:\\['c=\"a\"'\\]".matches(a)
|
不需要转义, 最终:"product:\\['c=\"a\"'\\]".matches(a)
"
格式,那么会是什么样子的呢?
[
: product:\['c="a"'\]
'
"
, 所以必须要转义, 选择 "
的方式,需要转义 "
和 \
\
: product:\\['c="a"'\\]
"
: product:\\['c=\"a\"'\\]
"product:\\['c=\"a\"'\\]".matches(a)
\
, "
\
: "product:\\\\['c=\\"a\\"'\\\\]".matches(a)
"
: \"product:\\\\['c=\\\"a\\\"'\\\\]\".matches(a)
"
包裹: "\"product:\\\\['c=\\\"a\\\"'\\\\]\".matches(a)"