ASCII 碼: 转义字符,正则表达式,特殊字符,模式匹配

Wesley13
• 阅读 971

所有的ASCII码都可以用“\”加数字(一般是8进制数字)来表示。而C中定义了一些字母前加"\"来表示常见的那些不能显示的ASCII字符,如\0,\t,\n等,就称为转义字符,因为后面的字符,都不是它本来的ASCII字符意思了。

所有的转义字符和所对应的意义:

转义字符

意义

ASCII码值(十进制)

\a

响铃(BEL)

007

\b

退格(BS) ,将当前位置移到前一列

008

\f

换页(FF),将当前位置移到下页开头

012

\n

换行(LF) ,将当前位置移到下一行开头

010

\r

回车(CR) ,将当前位置移到本行开头

013

\t

水平制表(HT) (跳到下一个TAB位置)

009

\v

垂直制表(VT)

011

\\

代表一个反斜线字符''\'

092

\'

代表一个单引号(撇号)字符

039

\"

代表一个双引号字符

034

\?   

代表一个问号   

063   

\0

空字符(NULL)

000

\ooo

1到3位八进制数所代表的任意字符

三位八进制

\xhh

1到2位十六进制所代表的任意字符

二位十六进制

注意:区分,斜杠:"/" 与 反斜杠:"\" ,此处不可互换

所以在拼接特殊字符时可以使用\在特殊字符前面添加上   在实现字符的拼接

ASCII码表 0-127

Bin

Dec

Hex

缩写/字符

解释

00000000

0

00

NUL(null)

空字符

00000001

1

01

SOH(start of headling)

标题开始

00000010

2

02

STX (start of text)

正文开始

00000011

3

03

ETX (end of text)

正文结束

00000100

4

04

EOT (end of transmission)

传输结束

00000101

5

05

ENQ (enquiry)

请求

00000110

6

06

ACK (acknowledge)

收到通知

00000111

7

07

BEL (bell)

响铃

00001000

8

08

BS (backspace)

退格

00001001

9

09

HT (horizontal tab)

水平制表符

00001010

10

0A

LF (NL line feed, new line)

换行键

00001011

11

0B

VT (vertical tab)

垂直制表符

00001100

12

0C

FF (NP form feed, new page)

换页键

00001101

13

0D

CR (carriage return)

回车键

00001110

14

0E

SO (shift out)

不用切换

00001111

15

0F

SI (shift in)

启用切换

00010000

16

10

DLE (data link escape)

数据链路转义

00010001

17

11

DC1 (device control 1)

设备控制1

00010010

18

12

DC2 (device control 2)

设备控制2

00010011

19

13

DC3 (device control 3)

设备控制3

00010100

20

14

DC4 (device control 4)

设备控制4

00010101

21

15

NAK (negative acknowledge)

拒绝接收

00010110

22

16

SYN (synchronous idle)

同步空闲

00010111

23

17

ETB (end of trans. block)

传输块结束

00011000

24

18

CAN (cancel)

取消

00011001

25

19

EM (end of medium)

介质中断

00011010

26

1A

SUB (substitute)

替补

00011011

27

1B

ESC (escape)

溢出

00011100

28

1C

FS (file separator)

文件分割符

00011101

29

1D

GS (group separator)

分组符

00011110

30

1E

RS (record separator)

记录分离符

00011111

31

1F

US (unit separator)

单元分隔符

00100000

32

20

(space)

空格

00100001

33

21

!

 

00100010

34

22

"

 

00100011

35

23

 

00100100

36

24

$

 

00100101

37

25

%

 

00100110

38

26

&

 

00100111

39

27

'

 

00101000

40

28

(

 

00101001

41

29

)

 

00101010

42

2A

*

 

00101011

43

2B

 

00101100

44

2C

,

 

00101101

45

2D

-

 

00101110

46

2E

.

 

00101111

47

2F

/

 

00110000

48

30

0

 

00110001

49

31

1

 

00110010

50

32

2

 

00110011

51

33

3

 

00110100

52

34

4

 

00110101

53

35

5

 

00110110

54

36

6

 

00110111

55

37

7

 

00111000

56

38

8

 

00111001

57

39

9

 

00111010

58

3A

:

 

00111011

59

3B

;

 

00111100

60

3C

<

 

00111101

61

3D

=

 

00111110

62

3E

>

 

00111111

63

3F

?

 

01000000

64

40

@

 

01000001

65

41

A

 

01000010

66

42

B

 

01000011

67

43

C

 

01000100

68

44

D

 

01000101

69

45

E

 

01000110

70

46

F

 

01000111

71

47

G

 

01001000

72

48

H

 

01001001

73

49

I

 

01001010

74

4A

J

 

01001011

75

4B

K

 

01001100

76

4C

L

 

01001101

77

4D

M

 

01001110

78

4E

N

 

01001111

79

4F

O

 

01010000

80

50

P

 

01010001

81

51

Q

 

01010010

82

52

R

 

01010011

83

53

S

 

01010100

84

54

T

 

01010101

85

55

U

 

01010110

86

56

V

 

01010111

87

57

W

 

01011000

88

58

X

 

01011001

89

59

Y

 

01011010

90

5A

Z

 

01011011

91

5B

[

 

01011100

92

5C

\

 

01011101

93

5D

]

 

01011110

94

5E

^

 

01011111

95

5F

_

 

01100000

96

60

`

 

01100001

97

61

a

 

01100010

98

62

b

 

01100011

99

63

c

 

01100100

100

64

d

 

01100101

101

65

e

 

01100110

102

66

f

 

01100111

103

67

g

 

01101000

104

68

h

 

01101001

105

69

i

 

01101010

106

6A

j

 

01101011

107

6B

k

 

01101100

108

6C

l

 

01101101

109

6D

m

 

01101110

110

6E

n

 

01101111

111

6F

o

 

01110000

112

70

p

 

01110001

113

71

q

 

01110010

114

72

r

 

01110011

115

73

s

 

01110100

116

74

t

 

01110101

117

75

u

 

01110110

118

76

v

 

01110111

119

77

w

 

01111000

120

78

x

 

01111001

121

79

y

 

01111010

122

7A

z

 

01111011

123

7B

{

 

01111100

124

7C

|

 

01111101

125

7D

}

 

01111110

126

7E

~

 

01111111

127

7F

DEL (delete)

删除

1. 常见的转义字符

字母前面加上反斜线 "\" 来表示常见的那些不能显示的ASCII字符,称为转义字符。如 \0, \t, \n 等。

转义字符

意义

ASCII码值(十进制)

\a

响铃(BEL)

007

\b

退格(BS) ,将当前位置移到前一列

008

\f

换页(FF),将当前位置移到下页开头

012

\n

换行(LF) ,将当前位置移到下一行开头

010

\r

回车(CR) ,将当前位置移到本行开头

013

\t

水平制表(HT) (跳到下一个TAB位置)

009

\v

垂直制表(VT)

011

*\\*

代表一个反斜线字符''\'

092

\'

代表一个单引号(撇号)字符

039

\"

代表一个双引号字符

034

\0

空字符(NULL)

000

\ddd

1到3位八进制数所代表的任意字符

三位八进制

\xhh

1到2位十六进制所代表的任意字符

二位十六进制

2. 正则表达式****中的特殊字符

 在表达式中有特殊意义,需要在它前面添加 "\" 才能当作普通文本字符来使用。

/斜线与\反斜线

① / 斜线, slash或又称为forward slash (前斜线), 原本是标点符号。 起源于古罗马,中世纪时用作逗号(而当时的双斜线//是被当作连接号的,后来演化成等号=)。

  a) 英语里的斜线, 最常用的即使替代字符“or”表选择, 比如: Yes/No; 还有就是避免名字的冲突,比如美国的人口普查表中有"Assyrian/Chaldean/Syriac", 就是为了避免因Syriac名字不同叫法而产生的冲突或歧义,其实也是or的含义;

  b) 算术; 英文里面称over, 比如: 123/456,也即分数
  c) 金钱表示。 $50/- 表示50美元上限, 后面没有了,防止有人添加修改。

  d) 日期的表示

② \ backslash, 反斜线, 主要用于电脑中, 也正是对普通/斜线的借鉴。 操作系统(xNix), 电脑语言(C/C++, Perl),编码(部分Unicode)等都使用它。

使用正则表达式regex匹配特殊字符(2种方法记忆):

方法1:首先加"\"匹配该特殊字符本身,然后在转义字符(即"\")前加"\"

方法2:在特殊字符前加"\\"(或者使用[]),特别的"\"需要使用"\\\\"来匹配

字符

说明

input

regex1

regex2

^

匹配输入字符串的开始位置。要匹配 "^" 字符本身,请使用 "\^"

"^"

\\^

[^]

$

匹配输入字符串的结尾位置。要匹配 "$" 字符本身,请使用 "\$"

"$"

\\$

[$]

.

匹配除了换行符(\n)以外的任意一个字符。要匹配小数点本身,请使用 "\."

"."

\\.

[.]

[ ]

用来自定义能够匹配 '多种字符' 的表达式。要匹配中括号,请使用 "\[" 和 "\]"

"["

\\[

[\\[]

*

修饰匹配次数为 0 次或任意次。要匹配 "*" 字符本身,请使用 "\*"

"*"

\\*

[*]

\

将下一个字符标记为或特殊字符、或原义字符、或向后引用、或八进制转义符。

"\\"

\\\\

 

?

修饰匹配次数为 0 次或 1 。要匹配 "?" 字符本身,请使用 "\?"

"?"

\\?

[?]

修饰匹配次数为至少 1****次。要匹配 "+" 字符本身,请使用 "\+"

"+"

\\+

[+]

{ }

修饰匹配次数的符号。要匹配大括号,请使用 "\{" 和 "\}"

"{"

\\{

[{]

|

左右两边表达式之间 "或" 关系。匹配 "|" 本身,请使用 "\|"

"|"

\\|

[|]

( )

标记一个子表达式的开始和结束位置。要匹配小括号,请使用 "\(" 和 "\)"

"("

\\(

[(]

3. java中使用正则表达式的情况

(1) String

public boolean matches(String regex)

public String replaceAll(String regex, String replacement)

public String replaceFirst(String regex, String replacement)

public String[] split(String regex)

(2) Pattern

public static Pattern compile(String regex)

public static boolean matches(String regex, CharSequence input)

典型的调用顺序是

Pattern p = Pattern.compile("a*b");

Matcher m = p.matcher("aaaaab");

boolean b = m.matches();

在仅使用一次正则表达式时

boolean b = Pattern.matches("a*b", "aaaaab");

java 示例

/**
     * @title 密码验证,规则:长度8~30,不能含有#和空格,至少含有数字、大写、小写、特殊字符中的3种
     * @param password
     * @return boolean
     */
    private static boolean validatePassword(String password) {
        if (StringUtils.isBlank(password)) {
            return false;
        }
        // 长度8~30
        if (password.length() < 8 || password.length() > 30) {
            return false;
        }
        // 不能含有#和空格
        if (password.contains("#") || password.contains(" ")) {
            return false;
        }
        int typecount = 0;
        // 如果含有数字
        if (Pattern.matches(".*[0-9]+.*", password)) {
            typecount++;
        }
        // 如果含有大写字母
        if (Pattern.matches(".*[A-Z]+.*", password)) {
            typecount++;
        }
        // 如果含有小写字母
        if (Pattern.matches(".*[a-z]+.*", password)) {
            typecount++;
        }
        // 如果含有特殊字符
        if (Pattern.matches(".*[^A-Za-z0-9]+.*", password)) {
            typecount++;
        }
        // 至少含有数字、大写、小写、特殊字符中的3种
        if (typecount < 3) {
            return false;
        }
        return true;
    }

本文分享 CSDN - 东海陈光剑。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
3个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Stella981 Stella981
3年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Easter79 Easter79
3年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
9个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这