Java正则表达式
来源:互联网 发布:数据库镜像 数据库备份 编辑:程序博客网 时间:2024/04/28 07:33
构造
匹配
字符
x
字符 x
\\
反斜线字符
\t
制表符 ('\u0009')
\n
新行(换行)符 ('\u000A')
\r
回车符 ('\u000D')
\f
换页符 ('\u000C')
\a
报警 (bell) 符 ('\u0007')
\e
转义符 ('\u001B')
字符类
[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{n}
X,恰好 n 次
X{n,}
X,至少 n 次
X{n,m}
X,至少 n 次,但是不超过 m 次
Reluctant 数量词
X??
X,一次或一次也没有
X*?
X,零次或多次
X+?
X,一次或多次
X{n}?
X,恰好 n 次
X{n,}?
X,至少 n 次
X{n,m}?
X,至少 n 次,但是不超过 m 次
Possessive 数量词
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,作为捕获组
正则表达式对字符串的常见操作://匹配手机号码是否正确。 String str = "15158041079";boolean b = str.matches("1[358]\\d{9}");//1[358][0-9]{9}System.out.println(b);2、切割(主要用到String类的split方法)
2.1 根据一个或多个点来拆分字符串
public static void main(String[] args) {String str = "zhangsan...lisi..wangwu";// 根据一个或多个点来拆分字符串String[] names = str.split("\\.+");for (String name : names) {System.out.println(name);}}
lisi
wangwu
public static void main(String[] args) {String str = "zhangsan666lisitttwangwu";// "."代表任意字符,(.)把它封装为组,编号为1...n,调用它直接用编号,//1由于代 表的是正常的 1,用\1将它转义为组编号,由于是在字符串中,再用\\1来转义String[] names = str.split("(.)\\1+");for (String name : names) {System.out.println(name);}}
lisi
wangwu
public static void main(String[] args) {String str = "zhangsanttttlisimmmwangwu";str = str.replaceAll("(.)\\1+", "$1");// $符号调用了前面参数中的第1组System.out.println(str);String tel = "15158041079";// 括号表示 组 被替换的部分 $n 表示 第n组的内容tel = tel.replaceAll("(\\d{4})\\d{3}(\\d{4})", "$1****$2");System.out.println(tel);// 1382****1111}输出结果:
1382****1111
4、获取
public static void main(String[] args) {String str = "da asdf sdf,sdkfh,sdk sdhh jtt!";String regex = "\\b[a-z]{3}\\b";// 1,将正则规则进行对象的封装Pattern p = Pattern.compile(regex);// 2, 通过正则对象的matcher方法字符串相关联。获取要对字符串操作的匹配器对象Matcher 。Matcher m = p.matcher(str);// 使用Matcher对象的方法对字符串进行操作。// 既然要获取三个字母组成的单词// 查找 find();System.out.println(str);while (m.find()) {System.out.println(m.group());// 获取匹配的子序列}}输出结果:
sdf
sdk
jtt
网页爬虫:
/* * 网页爬虫:其实就一个程序用于在互联网中获取符合指定规则的数据。 爬取邮箱地址。 */public static void main(String[] args) throws IOException {List<String> list = getMails();for (String mail : list) {System.out.println(mail);}}public static List<String> getMails() throws IOException {// 1,读取源文件。BufferedReader bufr = new BufferedReader(new FileReader("D:\\mail.html"));// 2,对读取的数据进行规则的匹配。从中获取符合规则的数据.String mail_regex = "\\w+@\\w+(\\.\\w+)+";List<String> list = new ArrayList<String>();Pattern p = Pattern.compile(mail_regex);String line = null;while ((line = bufr.readLine()) != null) {Matcher m = p.matcher(line);while (m.find()) {// 3,将符合规则的数据存储到集合中。list.add(m.group());}}bufr.close();return list;}
- Java 正则表达式正则
- 【正则表达式】Java正则表达式
- 正则表达式 JAVA正则表达式
- 【Java】【正则表达式】正则表达式
- Java 正则表达式详解_正则表达式
- java正则表达式!正则表达式踩坑!!!
- 正则表达式工具类,正则表达式封装,Java正则表达式
- Java正则表达式详解
- Java正则表达式详解
- Java正则表达式详解
- Java正则表达式详解
- Java正则表达式详解
- java和正则表达式
- java正则表达式详解!
- Java正则表达式详解
- Java正则表达式详解
- Java正则表达式详解
- Java正则表达式详解
- Effective stl 第一章 第7、8条
- 【整理】adb命令、adb shell与Linux各种命令(busybox)
- 【Python】set与frozenset的区别
- java设计模式(4)---多例模式
- 图片文字识别
- Java正则表达式
- Jos-lab2 (Challenges)
- unity修改网格数据
- Android对Linux内核的改动?
- Linux驱动子系统之I2C(4)
- 测试用例注意
- keyguard
- 增量视觉跟踪器(Incremental visual tracking ,IVT)
- Linux终端命令大全