资讯专栏INFORMATION COLUMN

正则表达式的元字符和转义字符,又及转义字符和ASCII码之间的关系小解

Jensen / 1929人阅读

摘要:现在解释和正则匹配中的转义字符之间的关系其实中的转义字符和正则中的转义字符是同一样东西,都是特殊意义的字符,也算对中一些特殊字符或不能显示的字符的定义或别称。

1、正则表达式的组合

正则表达式由元字符和转义字符组成

元字符有

^ :断言目标的开始位置(或多行模式下的行首位置)

$ :断言目标的介绍位置(或多行模式下的结尾位置)

. :匹配除换行符外的其他任何字符

[ :匹配字符类定义

] :介绍内字符定义

| :开始一个可选分支

( :子组的开始标记

) :子组的结束标记

? :作为量词表示0次或多次,若位于量词之后则是用于改变量词的贪婪特性

* :量词0次或多次匹配

+ :量词1次或多次匹配

{ :自定义量词的开始标记

} :自定义量词的结束标记

转义字符有

f

换页(FF),将当前位置移到下页开头
十进制码是:012,八进制码是:14,十六进制是:x0e

换行(LF) ,将当前位置移到下一行开头
十进制码是:010,八进制码是:12,十六进制是:x0c

回车(CR) ,将当前位置移到本行开头
十进制码是:013,八进制码是:15,十六进制是:x0d

水平制表(HT) (跳到下一个TAB位置)
十进制码是:009,八进制码是:11,十六进制是:x09

代表一个反斜线字符""
十进制码是:092,八进制码是:134,....

"

代表一个单引号(撇号)字符
十进制码是:039,八进制码是:47

"

代表一个双引号字符
十进制码是:034,八进制码是:42

?

代表一个问号
十进制码是:063,八进制码是:77

空字符(NUL)
十进制码是:000,八进制码是:00
   

说到了转义字符,现在解释一下转义字符和ASCII之间的关系:

2、ASCII码
我们知道,计算机内部,所有信息最终都是一个二进制值。每一个二进制位(bit)有0和1两种状态,因此八个二进制位就可以组合出256种状态,这被称为一个字节(byte)。也就是说,一个字节一共可以用来表示256种不同的状态,每一个状态对应一个符号,就是256个符号,从00000000到11111111。
上个世纪60年代,美国制定了一套字符编码,对英语字符与二进制位之间的关系,做了统一规定。这被称为 ASCII 码,一直沿用至今。
ASCII 码一共规定了128个字符的编码,比如空格SPACE是32(二进制00100000),大写的字母A是65(二进制01000001)。这128个符号(包括32个不能打印出来的控制符号),只占用了一个字节的后面7位,最前面的一位统一规定为0。
x表示后面的字符是十六进制数,表示后面的字符是八进制数。
所有的ASCII码都可以用“”加数字(一般是8进制数字)来表示。而C中定义了一些字母前加""来表示常见的那些不能显示的ASCII字符,如0,t,n等部分特殊字符,就称为转义字符,因为后面的字符,都不是八进制数字了,所以也就不是ASCII字符意思了,算定义的一些特殊字符来表示吧。

常用的ASCII码

a-z : 十进制码是97-122,八进制码是141-172,"141" === "a" && "141" === "a" ->true

A-Z : 十进制码是65-90,八进制码是101-132, "101" === "A" && "101" === "A" -> true

0-9 : 十进制是48-57,八进制码是060-071,"60" === "0" && "60" === "" ->true

不常用的ASCII码,在上面正则组成部分中有写。

现在解释ASCII和正则匹配中的转义字符之间的关系:

其实ASCII中的转义字符和正则中的转义字符是同一样东西,都是特殊意义的字符,也算对ASCII中一些特殊字 符或不能显示的字符的定义或别称。因为ASCII的应用场景可以是任何地方,所以转义字符也可以用于正则匹配中,甚至可以将对转义字符或匹配规则中非元字符的字符用八进制或十六进制的编码转换后用于正则匹配中,哈哈

例子:
/141/.test("acdf"); ->true 匹配"a"
/134/.test("af"); ->true 匹配""
/[141-z]/.test("a141"); ->true 匹配a-z中的任意一个字符
/b77/.test("a"); ->true 匹配是否有b或没有字符 "77" === "?" ->true

其实当字符串进行大小比较时,也是比较的首字母的ASCII大小
"a" > "A" ->true 相当于 97 > 65 也相当于 "141" > "101" 也相当于 "x61" > "x41"
"a" > """ ->true 相当于 97 > 39 也相当于 "141" > "47"
等等其他匹配
最后在讲讲其他具体编程语言中转义字符串

具体编程语言中有一些特殊标志字符,会当成编程语言中的标志符号来识别,所以需要转义字符来识别,例如:如HTML转义符、java 转义符、xml 转义符、 oracle 转义符、sql 转义符 、sqlserver 转义符、php 转义符、asp 转义符、vb转义符、 javascript 转义符等等,还有网址中的百分号。作用环境当然是对应的编程语言中。

转义字符串(Escape String),即字符实体(Character Entity)分成三部分:第一部分是一个&符号,英文叫ampersand第二部分是实体(Entity)名字或者是#加上实体(Entity)编号第三部分是一个分号

例如 HTML中的 > < © & " 空格 -> ><©&"  
例如url中的 空格,?,+,,&.... -> (十六进制的)%20 %3F %2B %5C %26当然也可以用第二块的ASCII中八进制或十六进制码 
encodeURIComponent(" ")-> %20
encodeURIComponent("?")-> %3F
encodeURIComponent("77")-> %3F
....
decodeURIComponent("%3F")-> "?"
decodeURIComponent("77")-> "?"
decodeURIComponent("%5C")-> ""
decodeURIComponent("134")-> ""
此处想说ASCII码真的是随处可用

详细可参考HTML转义字符对照表

总结:
1:将普通字符转为特殊用途,一般是针对所有编程语言中,用于表示不能直接显示的字符,比如后退键,回车键,等。
2:用来将特殊意义的字符转换回它原来的意义。一般用具体的编程语言环境中。例如HTML转义符、php 转义符、xml 转义符,java转义符,或正则表达式中。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/99599.html

相关文章

  • re模块字符串处理

    摘要:插入符号匹配字符串的开头,并且在模式也匹配换行后的首个符号。,和修饰符都是贪婪的它们在字符串进行尽可能多的匹配。如果正则式希望找到,它将会匹配整个字符串,而不仅是。用于表示一个字符集合。标记应该在表达式字符串首位表示。 re模块和字符串处理 对于简单的匹配,通常有str.find(),str.endswith(), str.startswith() >>>text = abcd >>>...

    lmxdawn 评论0 收藏0
  • Python标准库---19、文本处理服务:re正则达式操作

    摘要:正则表达式使用反斜杠来表示特殊形式,或者把特殊字符转义成普通字符。解决办法是对于正则表达式样式使用的原始字符串表示法在带有前缀的字符串字面值中,反斜杠不必做任何特殊处理。为了避免警告,需要将它们用反斜杠转义。 上一篇文章:Python标准库---18、文本处理服务:string 常见的字符串操作下一篇文章: 这个模块提供了与 Perl 语言类似的正则表达式匹配操作。 模式和被搜索的字...

    jcc 评论0 收藏0
  • PHP基础系列之正则达式(一)

    摘要:正则表达式作为一个匹配的模板,是由定界符,原子普通字符,例如有特殊功能的字符称为元字符,例如等以及模式修正符等部分组成的文字模式。正则表达式中可以使用编码。限定符限定符用来指定正则表达式的一个给定原子必须要出现多少次才能满足匹配。 正则表达式的定义 正则表达式就是描述字符排列模式的一种自定义的语法规则。由于正则表达式本身具有一套非常完整的、可以编写模式的语法体系,提供了一种灵活且直观的...

    Anchorer 评论0 收藏0
  • 字符那些事

    摘要:字符编码的那些事前言之前看到中对扩展了不少新特性,字符串操作更加友好,比如,,。其中涉及到不少字符编码的知识,为了更好理解这些新特性,本文对字符编码相关知识做一个较全面的梳理和总结。 字符编码的那些事 前言 之前看到ES6中对String扩展了不少新特性,字符串操作更加友好,比如u{1f914},codePointAt(),String.fromCodePoint()。其中涉及到不少字...

    shadajin 评论0 收藏0
  • 字符那些事

    摘要:字符编码的那些事前言之前看到中对扩展了不少新特性,字符串操作更加友好,比如,,。其中涉及到不少字符编码的知识,为了更好理解这些新特性,本文对字符编码相关知识做一个较全面的梳理和总结。 字符编码的那些事 前言 之前看到ES6中对String扩展了不少新特性,字符串操作更加友好,比如u{1f914},codePointAt(),String.fromCodePoint()。其中涉及到不少字...

    kviccn 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<