1 基本格式 :字符{个数}
2 常用符号
. 代表一个字符的通配符 能和回车之外的任何字符匹配
[] 字符集 能和括号内的任何一个字符相匹配。方括号内也可以表示一个范围,用“-”符号将起
始和末尾字符区分开来,例如[0-9]
[^] 排斥型字符集 能和集合之外的任意字符匹配
^ 起始位置 定位到一行的起始位置处并向后匹配
$ 结束位置 定位到一行的结尾处并向前匹配
\b 单词边界
\B 非单词边界
() 组 按子表达式进行分组
| 或 或关系的逻辑选择,通常和组合结合使用
\ 转义 匹配反斜杠之后的字符,所以可以匹配一些特殊符号
* 零个或多个 匹配表达式首项字符的零个或多个副本
+ 一个或多个 匹配表达式的首项字符的一个或多个字符
? 零个或一个 匹配表达式首项字符的一个或零个副本
n 重复 匹配表达式首项字符的n个副本
3 关于字符
\d 表示数字,相当于[0-9]
\D 表示非数字,相当于[^0-9]
\s 表示空白符,相当于[\t\n\x0B\f\r]
\S 表示非空白字符,相当于[^\s]
\w 表示单词字符,相当于[a-zA-Z_0-9]
\W 表示非单词字符,相当于[^\w]
4 举例:[0-9]{2,4}\b。 可以匹配 123 1988 2015 16
5.测试工具推荐 正则表达式测试工具 QRe
6 学习网址推荐 正则表达式30分钟入门教程http://deerchao.net/tutorials/regex/regex-1.htm
使用例子:将多个空格替换为一个空格:
public static String format(String value) {
String stmt_text = value.trim().replaceAll("\\s{2,}", " ");
String abc = stmt_text.replace(" ", ",");
return abc;
}
统计一篇文章中英文单词的数量
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* 本文是 编写高质量代码之Java 秦小波 成林 著
* 建议57:推荐在复杂字符串操作中使用正则表达式 学习笔记
* @author Administrator
*
*/
public class RegularExpressions {
public static void main(String[] args) {
//接收键盘输入
Scanner input = new Scanner(System.in);
while(input.hasNext()){
String str = input.nextLine();
//正则表达式对象
//在Java的正则表达式中"\b"表示的是一个单词的边界,
//它是一个位置界定符,一边为字符或数字,另外一边则非字符或数字,
//"\w"(它表示的是字符或数字)
Pattern pattern = Pattern.compile("\\b\\w+\\b");
Matcher matcher = pattern.matcher(str);
//记录单词数量
int wordsCount = 0;
while (matcher.find()) {
wordsCount++;
}
System.out.println(str+" 单词数 "+wordsCount);
}
}
}
匹配手机号
[1] 匹配1 ,[0-9]匹配 0-9,{10}个数为1o ,一共11位
Pattern.compile("[1][0-9]{10}").matcher(内容).matches()
匹配邮箱
Pattern.compile("^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\\.[a-zA-Z0-9_-]+)+$").matcher(输入内容).matches()