Java编程思想第四版第十三章——正则表达式
2016-07-15 20:25
471 查看
1. 基本类型
在Java中,\的意思是“插入一个正则表达式的反斜线,其后的字符有特殊的意义”。如,要表示一个数字,正则表达式是\d。如果要插入一个普通的反斜线,应该是\\。不过换行和制表符之类的东西只需使用单反斜线:\n\t.字符
类别 | 意义 |
---|---|
B | 指定字符B |
\xhh | 十六进制值为oxhh的字符 |
\uhhhh | 十六进制表示为oxhhhh的Unicode字符 |
\t | 制表符Tab |
\r | 回车 |
\f | 换页 |
\e | 转义(Escape) |
类别 | 意义 |
---|---|
. | 任意字符 |
[abc] | 包含a,b和c的任何字符(和a|b|c作用相同) |
[^abc] | 除了a,b和c之外的任何字符(否定) |
[a-zA-Z] | 从a到z或从A到Z的任何字符(范围) |
[abc[hij]] | 任意a,b,c,h,i和j字符(与a|b|c|h|i|j作用相同)(合并) |
[a-z&&[hij]] | 任意h,i或j(交) |
\s | 空白符(空格、tab、换行、换页和回车) |
\S | 非空白符([^\s]) |
\d | 数字[0-9] |
\D | 非数字[^0-9] |
\w | 词字符[a-zA-Z0-9] |
\W | 非词字符[^\w] |
逻辑操作符
类别 | 意义 |
---|---|
XY | Y跟在X后面 |
X | Y |
(X) | 捕获组(capturing group),可以在表达式中用\i引用第i个捕获组 |
类别 | 意义 |
---|---|
^ | 一行的起始 |
$ | 一行的结束 |
\b | 词的边界 |
\B | 非词的边界 |
\G | 前一个匹配的结束 |
2.量词
贪婪型:量词总是贪婪的,除非有其他的选项被设置。贪婪表达式会为所有可能的模式发现尽可能多的匹配。导致此问题的一个典型理由就是假定我们的模式仅能匹配第一个可能的字符组,如果它是贪婪的,那么它会继续往下匹配。勉强型:用问号来指定,这个量词匹配满足模式所需的最少字符数。因此也称为懒惰的,最少匹配的,非贪婪的,或不贪婪的。
占有型:目前这类的量词只能在Java语言中才可以用。当正则表达式被应用于字符串时,它会产生相当多的状态,以便在匹配失败的时候可以回溯。而“占有的”量词并不保存这些中间状态,因此它们可以防止回溯。常常用于防止正则表达式失控。
import java.util.regex.*; public class TestRegularExpression { public static void main(String[] args) { // TODO Auto-generated method stub String[] args1 = new String[] {"(?i)((^[aeiou])|(\\s+[aeiou]))\\w+?[aeiou]\\b"}; String str = "Java now has regular expressions"; String str2 = "Arline ate eight apples and one orange while Anita hadn't any"; if(args1.length <1){ System.out.println("Usage:\njava TestRegularExpression" + "characterSequence regularExpression+"); System.exit(0); } System.out.println("Input: \"" + args1[0] + "\""); for (String arg : args1 ) { System.out.println("Regular expression: \"" + arg + "\""); Pattern p = Pattern.compile(arg); Matcher m = p.matcher(str2); while(m.find()){ System.out.println("Macth\"" + m.group() + "\" at positions " + m.start() + "-" + (m.end() - 1 )); } } } }/*Output Input: "(?i)((^[aeiou])|(\s+[aeiou]))\w+?[aeiou]\b" Regular expression: "(?i)((^[aeiou])|(\s+[aeiou]))\w+?[aeiou]\b" Macth"Arline" at positions 0-5 Macth" ate" at positions 6-9 Macth" one" at positions 27-30 Macth" orange" at positions 31-37 Macth" Anita" at positions 44-49 *///
3.Pattern标记
Pattern类的compile()方法还有一个版本,它接受一个标记参数,如下:Pattern Pattern.compile(String regex, int flag)
其中flag来自以下Pattern类中的常量:
(1)split()方法将输入字符串断开成字符串对象数组,断开边界由以下正则表达式确定:
String[] split(CharSequence input)
String[] split(CharSequence input, int limit)
(2)替换操作
a) replaceFirst(String replacement)以参数字符串replacement替换掉第一个匹配成功的部分。
b ) replaceAll(String replacement)以参数字符串replacement替换掉所有匹配成功的部分。
c ) appendReplacement(StringBuffer sbuf, String replacement)执行渐进式的替换,它允许你调用其他方法来生成或处理replacement,使你能够以编程的方式将目标分割成组,从而具备更强大的替换功能。
d ) appendTail(StringBuffer sbuf),在执行了一次或多次appendReplacement()之后,调用此方法可以将输入字符串余下的部分复制到sbuf中。
(3)reset()
通过reset()方法,可以将现有的Matcher对象应用于一个新的字符序列。
Matcher m = Pattern.compile("[frb][aui][gx]").matcher("fix the rug with bags"); ……………… m.reset("fix the rig with rags"); ………………
正则表达式与I/O及扫描输入内容参见书本,通过例子学习。
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- msql 正则表达式
- 正则表达式
- 插入排序
- 冒泡排序
- 堆排序