黑马程序员-day13-正则表达式
2015-11-24 00:11
585 查看
------- <a href="http://www.itheima.com" target="blank">android培训</a>、<a href="http://www.itheima.com" target="blank">java培训</a>、期待与您交流! ----------
正则表达式 | String regex | 专门用于操作字符串,简化代码 |
特点 | 用一些特点的符号来操作方法,简化书写,正则表达式写在""号内。 | |
编译原理 | 正则表达式的书写,先会被当作字符串被虚拟机编译一次,再按照正则的构造机制编译一次,如正则表达式要表示反斜杠“\”,需写成"\\\\".首先按照字符串被编译为"\\",正则再做编译时就会将第二个反斜杠转为字符反斜杠,而不表示转义字符的意思了,再比如正则表达式要表示普通字符“.”,需写成"\\.",首先作为字符串会被编译为"\.",然后正则再编译的时候就会把表示匹配任意字符的“.”转义为一个普通的点。 也就是说,正则表达式的反斜杠,都是成对出现的。 | |
字符 | x | 字符 x |
\\ | 反斜线字符 | |
字符类 | [abc] | a、b 或 c(简单类) |
[^abc] | 任何字符,除了 a、b 或 c(否定) | |
[a-zA-Z] | a 到 z 或 A 到 Z,两头的字母包括在内(范围) | |
[a-d[m-p]] | a 到 d 或 m 到 p:[a-dm-p](并集) | |
[a-z&&[def]] | d、e 或 f(交集) | |
[a-z&&[^bc]] | a 到 z,除了 b 和 c:[ad-z](减去) | |
[a-z&&[^m-p]] | a 到 z,而非 m 到 p:[a-lq-z](减去) | |
预定义字符类 | . | 任何字符(与行结束符可能匹配也可能不匹配) |
\d | 数字:[0-9] | |
\D | 非数字: [^0-9] | |
\s | 空白字符:[ \t\n\x0B\f\r] | |
\S | 非空白字符:[^\s] | |
\w | 单词字符:[a-zA-Z_0-9] | |
\W | 非单词字符:[^\w] | |
边界匹配器 | ^ | 行的开头 |
$ | 行的结尾 | |
\b | 单词边界 | |
\B | 非单词边界 | |
\A | 输入的开头 | |
\G | 上一个匹配的结尾 | |
\Z | 输入的结尾,仅用于最后的结束符(如果有的话) | |
\z | 输入的结尾 | |
Greedy数量词,X表示对应字符 | X? | X,一次或一次也没有 |
X* | X,零次或多次 | |
X+ | X,一次或多次 | |
X{n} | X,恰好 n 次 | |
X{n,} | X,至少 n 次 | |
X{n,m} | X,至少 n 次,但是不超过 m 次 | |
Logical运算符 | XY | X 后跟 Y |
X|Y | X 或 Y | |
(X) | X,作为捕获组,如表达式((A)(B(C))) 包含四个组 1 ((A)(B(C))) 2 \A 3 (B(C)) 4 (C) 技巧:从左至右数左括号,第几个左括号就是第几组 | |
Back引用 | \n | 任何匹配的 nth 捕获组,表示捕获第n个组,如(.)表示任意字符,(.)+表示任意字符出现了多次,如"adsune"任意一个字符串均满足要求。但是如果是(.)\\1+,表示的是第一个字符是任意字符,但是从第二个字符起,必须匹配之前捕获到的第一个字符,也就是说,这个正则表达的意思是连续出现相同字符;而当第一个连续相同的匹配完,(.)就表示下一个字符了,那么\\1+也就是表示相应字符连续出现了 |
方法(String类方法) | 判断 | boolean matches(String regex) 判断该字符串是否匹配该正则表达式 |
切割 | 1、String[] split(regex) 根据给定的正则表达式对字符串进行拆分 2、String[] split(regex,int limit) limit>0,至多切割limit-1次 limit=0,切完,丢弃末尾空字符串 limit<0,切完,不丢弃末尾空字符串 | |
替换 | 1、String replaceAll(regex,str) 使用str来替换掉所有符合regex的内容 2、String replaceFirst(regex,str) 使用str来替换掉第一次符合regex的子字符串 注意:str可以对regex内容中的捕获组所获取到的内容进行引用,使用符号:$n,其中n表示第几个捕获组,如: String replaceAll("(.)\\1+","$1")即将字符串中连续出现的相同字符替换为对应的单个字符 | |
Pattern类 | 含义 | 将正则表达式进行编制,并封装为模式; 此类构造函数不对外提供,使用compile方法来获取对象; 此类线程安全; |
创建模式 | 1、static Pattern compile(regex) 此方法返回按照指定正则表达式编制的模式(即本类对象) | |
获取regex | 2、String pattern() 会返回此模式对应的regex,但注意反斜杠会改变 | |
切割 | 3、String[] split(String str) 按照此模式对str进行切割 | |
创建匹配器 | 4、Matcher matcher(String str) 此方法会返回一个此模式与给定字符串关联的匹配器,以便使用该匹配器来控制、操作该匹配过程 | |
Matcher类 | 含义 | 通过模式对字符串进行匹配操作的匹配器,能够通过匹配器对匹配过程进行操作和控制; 此类同样没有构造函数; |
创建与指定字符串相匹配的匹配器 | 通过Pattern类的matcher方法来获取与str相匹配的匹配器 Matcher m=Pattern.compile(regex).matcher(str); | |
匹配 | boolean matches() 尝试对匹配区域进行匹配,完全匹配返回true,一旦出现不匹配就返回false | |
寻找 | boolean find() 尝试进行寻找匹配的内容,一旦找到返回ture,否则false | |
获取匹配的内容 | String group() 返回由以前匹配动作所匹配的子序列 | |
获取匹配内容位置 | int start() 返回相匹配子序列的初始索引 int end() 返回子序列最后相匹配位置的偏移量 | |
重置匹配器 | Matcher reset() 将匹配器进行重置,清空索引位置 Matcher reset(String str) 重置匹配器的索引和关联字符串 | |
设置匹配器的匹配区域 | Matcher region(begin,end) 设置之后,匹配器不会再对超出区域部分匹配(含头不含尾) | |
替换 | String replaceAll(str) 使用匹配器将区域内相匹配的所有内容替换为str |
相关文章推荐
- 黑马程序员-day12-String类与基本数据类型包装类
- 黑马程序员-day11-多线程下部分
- 黑马程序员-day10-多线程上部分
- 黑马程序员-day09-异常
- 月薪3万的程序员都避开了哪些坑
- 一个老程序员推荐的 10 个编程策略
- 每一天,程序员是怎么过得?
- 面试记录
- 面试之C题目汇总5
- 面试之C题目汇总2
- 面试之C题目汇总1
- 面试之汇总在线编程题
- 【面试】如何避免OOM的发生
- 判断一个单向链表中是否有环
- 50道Java线程面试题
- 黑马程序员——Map
- iOS中常见的面试题
- 黑马程序员——Java笔记——接口
- 10+年程序员总结的20+条经验教训
- android面试重点(一)ListView的优化