Pulpcode

捕获,搅碎,拼接,吞咽

0%

字符串的转义和反转义

ASCII字符转义

每次说到转义字符,首先想到的就是ASCII码。

转义字符就是一种代表,我们要区分展示和其本身在内存,在硬盘中的存储的区别。

比如这两个:

\a 响铃(BEL) 007

\b 退格(BS) 008

也就是说我们在字符串中输入的’\a’就是代表了一个字符,那么假如说我就是想要’\a’这两个字符呢?

这时候就要用到反转义了:’\a’ 就代表 ‘\a’(两个字符)

或者在python中有元字符这个概念,在字符的前面加上r,这样你就不用挨个反转义了。

1
2
3
4
>>> s = r'\a'
>>> print s
\a
>>>

html中得转义字符

html里面有类似如下的转义字符:

1
2
< 小于 &lt
> 大于 &gt

因为html和xml这样的“语言”,就是由<xx><\xxx>这样的标签构成的。

那么<自然会被游览器解释,如果不想这样,就需要用转义字符串来代表它们,表示它们确实只是普通的字符串。

这一点在防止用户在评论,留言板中插入自定义表单尤其重要。

python的 xml.sax.saxutils 库可以容易方便的处理此问题。

你可以选择对于这样一个字符串,到底是转义,还是不转义。

1
2
3
4
5
6
7
8
9
>> x = "<a>hehe</a>"
x = "<a>hehe</a>"
>>> saxutils.escape(x)
saxutils.escape(x)
'&lt;a&gt;hehe&lt;/a&gt;'
>>> saxutils.unescape(x)
saxutils.unescape(x)
'<a>hehe</a>'
>>>

斜杠与反斜杠

以下内容从“知乎”,“果壳”等网站获得。

反斜线“\”是电脑出现了之后为了表示程序设计里的特殊含义才发明的专用标点。就是说,除了程序设计领域外,任何地方都不应该有使用反斜杠的时候,请永远使用正斜线“/”。

在英语中,它们被这么称呼:

Slash 正斜杠/

Backslash 反斜杠\

还要注意的是,unix,linux使用斜杠做目录,网址也是使用斜杠,只有windows的目录使用反斜杠。

正则表达式

上面提到了斜杠与反斜杠,类似于html中的<>有其特殊意义,正则表达式中的:\.*^&[]{}?等,也有其特殊意义。所以,为了让这些元字符失去其特殊意义,就需要用反斜杠

比如下段sed命令:

1
2
3
sed 's/<i>\(.*\)<\/i>/[\1]/g' f.txt
将每一行的:<i>xxx</i>
替换为[xxx]

因为斜杠在多数命令中本来就作为分隔,所以就需要\反斜杠转义。