博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
语言的转义字符及正则表达式的转义字符的表示
阅读量:5339 次
发布时间:2019-06-15

本文共 1420 字,大约阅读时间需要 4 分钟。

Java语言中的转义字符及正则语法中的转义字符在Java字符串中的表示。

ASCLL中的转义字符共有14个:

\o

空字符(NULL)

00H/0

\n

换行符(LF)

0AH/10

\r

回车符(CR)

0DH/13

\t

水平制表符(HT)

09H/9

\v

垂直制表(VT)

0B/11

\a

响铃(BEL)

07/7

\b

退格符(BS)

08H/8

\f

换页符(FF)

0CH/12

\’

单引号

27H/39

\”

双引号

22H/34

\\

反斜杠

5CH/92

\?

问号字符

3F/63

\ddd

任意字符

三位八进制

\xhh

任意字符

二位十六进制

在字符串或字符中只要出现反斜杠就 连同其后的一或多个字符 被认为是一个转义字符并尝试解析之,若不是合法的转义字符就会出错。在大多数语言中均如是,不过可能有些语言里不支持上述所有的转义字符

语言对转义字符的处理:

在Java中支持的有11个: \0 \n \r \t \b \f \' \" \\ \ddd \xhh ,即在Java中与反斜杠搭配的只能有这11种情况,除此之外的都被认为是有误的。如 "\c" 或 '\c' 都会报错,即使我们本意不是想把前者中的 \c 当做转义字符而是想表示 \ 和 c 这两个字符,但由于语言看到了斜杠就会按转义字符去解析,所以对于前后者都会因解析不成转义字符而报错。故若想表示这两个字符而不报错,就要加以处理以让语言不把它们当做转义字符解析,方法是对斜杠转义(让语言把斜杠当做普通字符而非转义字符的开始)——即 “\\c" 。

正则表达式的字符串表示:(在Java中用字符串表示正则表达式时很常出现上述情况)

在Java中没有什么特殊的语法能直接表示正则表达式,需要用字符串表示之(即在字符串里依次表示正则表达式里的每个字符),JavaScript则好像可以直接表示?

在正则语法中有几个元字符( . $ | ( ) [ { ^ ? * + \ )有特殊含义(如 * 在正则表达式中表示匹配0或多个),根据正则语法若要将这些字符当做普通字符而非元字符来对待则需要加斜杠转义(如当我们想匹配该字符本身,则应该在模式定义中对之转义即 \* ),显然用字符串表示这些元字符的转义字符时(如 "\*")会因为解析不成ASCLL转义字符而报错,解决方法如上所述改为 "\\*" 。一个更极端的例子:在字符串中 \ 是元字符,为了在字符串中表示正则表达式的 \ 就需要两个斜杠即 \\ ;而正则表达式中 \ 也是元字符,为了要匹配  \ 自身,根据正则语法需转义为 \\ ,此时字符串表示就需要四个斜杠即 \\\\ 。

正则表达式中可能出现三种转义字符:预定义的一些正则表达式如表示数字的 \d 表示字符 \w 等、正则语法的元字符当普通字符对待时转义字符(特殊转普通)、ASCLL中的转义字符(普通转特殊)。

总结(正则表达式的字符串形式):根据正则语法定义正则表达式,然后将表达式转为字符串表示:一个简单的规则是正则表达式中的任何一个'\',在字符串中,需要替换为两个'\',(对于ASCLL转义字符反斜杠替不替换均可)。更简单的方式是在IDE(如Eclipse)中将定义好的正则表达式复制到String类型变量的值中,会自动添加 '\' 。

 

转载于:https://www.cnblogs.com/z-sm/p/6944850.html

你可能感兴趣的文章
poj 题目分类
查看>>
windows 安装yaml支持和pytest支持等
查看>>
读书笔记:季羡林关于如何做研究学问的心得
查看>>
面向对象的优点
查看>>
套接口和I/O通信
查看>>
阿里巴巴面试之利用两个int值实现读写锁
查看>>
浅谈性能测试
查看>>
Winform 菜单和工具栏控件
查看>>
CDH版本大数据集群下搭建的Hue详细启动步骤(图文详解)
查看>>
巧用Win+R
查看>>
浅析原生js模仿addclass和removeclass
查看>>
Python中的greenlet包实现并发编程的入门教程
查看>>
java中遍历属性字段及值(常见方法)
查看>>
深入理解jQuery框架-框架结构
查看>>
YUI3自动加载树实现
查看>>
python知识思维导图
查看>>
当心JavaScript奇葩的逗号表达式
查看>>
App Store最新审核指南(2015年3月更新版)
查看>>
织梦MIP文章内容页图片适配百度MIP规范
查看>>
[Kali_BT]通过低版本SerialPort蓝牙渗透功能手机
查看>>