您好,欢迎来到化拓教育网。
搜索
您的当前位置:首页Java中的正则表达式与模式匹配研究

Java中的正则表达式与模式匹配研究

来源:化拓教育网


Java中的正则表达式与模式匹配研究

摘要 正则表达式是代表具有特殊意义字符的字符串。在信息时代,我们从海量数据中寻找特定的信息时,正则表达式起到了至关重要的作用。正则表达式仿佛一个模板,将某个字符模式与所搜索的字符串进行匹配。在编写程序时正则表达式也起着很重要的作用,应用广泛。本文主要研究java中正则表达式的使用,及模式匹配。

关键词 正则表达式;模式匹配;Pattern类;Matcher类

正则表达式仿佛一个模板,将某个字符模式与所搜索的字符串进行匹配。在编写程序时正则表达式也起着很重要的作用,应用广泛。本文主要研究java中正则表达式的使用,及模式匹配。

1 java中的Pattern类

1.1 重要方法

1)static Pattern compile(String regex)

该静态方法通过使用类名调用,返回一个Pattern类型的对象,并且将给定的正则表达式regex编译到模式中。

举例1:Pattern p ; p=Pattern.compile(“\\\\dabcd\\\\d”);

2)Matcher matcher(CharSequence input)

使用Pattern类的对象调用该方法,返回一个Matcher类型的对象,其主要作用是用在input中待匹配的字符序列初始化匹配对象。

举例2:Matcher m;m=p.matcher(“aaa1abcd2bbb”);

3)static Boolean matches(String regex,CharSequence input)

使用类名调用该方法,判断input是否与regex正则表达式匹配。

举例3:Pattern.matches(“\\\\dabcd\\\\d”, “aaa1abcd2bbb”);

//结果返回 true。

4)String pattern()

用对象调用,返回在其中编译过此模式的正则表达式。

举例4:Pattern p = Pattern.compile(“\\\\dabcd\\\\d”);

p.pattern();

//结果返回字符串“\\\\dabcd\\\\d”。

5)String[] split(CharSequence input);

用对象调用该方法,返回一个字符串数组,数组中的每个元素都是input中被该模式对象拆分的字符串。

举例5:Pattern p = Pattern.compile(“:”);

String arry[]=p.split(“a:bcd:ef”);

//结果:arry[0]=”a”,arry[1]=”bcd”,arry[2]=”ef”。

2 Matcher类

主要方法:

1)public boolean find()

使用模式对象调用该方法,尝试查找与该模式匹配的输入序列的下一个子序列。若找到返回true,否则返回false。

举例6:Pattern p=Pattern.compile(“\\\\dabcd\\\\d”);

Matcher m = p.matcher(“12abcd3fcsd);

If(m.find()){System.out.print(“ok”);}

//m调用find()方法,找到与之匹配的子序列“2abcd3”,程序将输出“ok”。

说明:该方法始于匹配器区域的开头,如果该方法的前一次调用成功,并且没有重置,则下一次调用时从上次没有匹配的第一个字符开始。例如在上例中下一次匹配时从字符“f“处向后查找。

2)public boolean find(intstart)

使用模式对象调用该方法,该方法重置匹配器,尝试查找匹配该模式、从指定索引start处开始的输入序列的下一个子序列。

举例7:Pattern p=Pattern.compile(“\\\\dabcd\\\\d”);

Matcher m = p.matcher(“12abcd3fcsd);

If(m.find(3)){System.out.print(“ok”);}

//程序结果没有输出“ok“。将从字符”b”处查找匹配的子序列。

3)public int start()

使用模式对象调用该方法,返回以前匹配的初始索引。

4)public int end()

使用模式对象调用该方法,返回最后匹配字符之后的偏移量。

5)public String group()

使用模式对象调用该方法,返回由以前匹配操作所匹配的输入子序列。

举例8: Pattern p=Pattern.compile(“\\\\dabcd\\\\d”);

Matcher m = p.matcher(“12abcd3fcsd);

m.find();

System.out.println(m.start+”---”+m.end()+”,”+m.group())

//结果1---6,2abcd3。

6)public String replaceAll(Stringreplacement)

使用模式对象调用该方法,替换模式与给定替换字符串相匹配的输入序列的每个子序列。

举例9:Pattern p=Pattern.compile(“\\\\dabcd\\\\d”);

Matcher m = p.matcher(“12abcd3fcsd);

System.out.print(m.replaceAll(“***”));

//结果:1***fcsd。

7)public boolean matches()

使用模式对象调用该方法,尝试将整个字符串与模式匹配。若完全匹配返回true,否则返回false。

举例10:Pattern p=Pattern.compile(“\\\\dabcd\\\\d”);

Matcher m = p.matcher(“1abcd3);

Matcher m1 = p.matcher(“2abcd33”);

If(m.matches()) System.out.print(“ok”);

If(m1.matches()) System.out.print(“ok111”);

//程序结果输出 “ok“。

3 正则表达式的构造

1)代表单个字符的元字符

元字符 在正则表达式中的写法 意义

. “.” 代表任意一个字符

\\d “\\\\d” 代表0—9的任何一个数字

\\D “\\\\D” 代表任何一个非数字字符

\\s “\\\\s” 代表空格类字符:

’\’ ‘\\n’ ‘\\x0B’ ‘\\f’ ‘\\r’

\\S “\\\\S” 代表非空格类字符

\\w “\\\\w” 代表可用于标识符的字符

(不包括美元符号)

\\W “\\\\W” 代表不能用于标识符的字符

2)限定符模式

带限定符号的模式 意义 带限定符号的模式 意义

X? X出现0次或1次 X{n} X恰好出现n次

X* X出现0次或多次 X{n,} X至少出现n次

X+ X出现1次或多次 X{n,m} X出现n次至m次

4 应用举例

1)Email正则表达式的书写。

Pattern emailer = Pattern.compile(”\\\\w+([-+.]\\\\w+)*@\\\\w+([-.]\\\\w+)*\\\\.\\\\w+([-.]\\\\w+)*”);

2)电话号码正则表达式的书写。

Pattern tel = Pattern.compile(”\\\\d{3,4}-\\\\d{7,8}|\\\\d{11}”);

参考文献

[1]java大学实用教程.清华大学出版社.

[2]java 2 编程思想.

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- huatuo9.cn 版权所有 赣ICP备2023008801号-1

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务