Java正则表达式教程及示范代码Word文档格式.docx

上传人:b****6 文档编号:17291084 上传时间:2022-11-30 格式:DOCX 页数:10 大小:22.01KB
下载 相关 举报
Java正则表达式教程及示范代码Word文档格式.docx_第1页
第1页 / 共10页
Java正则表达式教程及示范代码Word文档格式.docx_第2页
第2页 / 共10页
Java正则表达式教程及示范代码Word文档格式.docx_第3页
第3页 / 共10页
Java正则表达式教程及示范代码Word文档格式.docx_第4页
第4页 / 共10页
Java正则表达式教程及示范代码Word文档格式.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

Java正则表达式教程及示范代码Word文档格式.docx

《Java正则表达式教程及示范代码Word文档格式.docx》由会员分享,可在线阅读,更多相关《Java正则表达式教程及示范代码Word文档格式.docx(10页珍藏版)》请在冰豆网上搜索。

Java正则表达式教程及示范代码Word文档格式.docx

to 

group 

with 

\n),其中n是组号(以\1起始) 

这里有一个稍微有点复杂却又很有用的正则表达式--它用来描述十进制和十六进制的整数。

[+-]?

[0-9]+|0[Xx][0-9A-Fa-f]+

不幸的是,在使用正则表达式的各种程序和库之间,它的语法还没有完全标准化。

对基本的构造上已达成了共识,但在细节方面有许多令人“抓狂”的区别(many 

maddening 

differences)。

Java的正则表达式类使用了与Perl语言类似的语法,但也不尽相同。

表12-8显示了Java语法的所有正则表达式构造。

要了解更多关于正则表达式的信息,请参考Pattern类的API文档,或者Jeffrey 

E. 

F. 

Friedl的著作《Mastering 

Regular 

Expressions》(O'

Reilly 

and 

Associates, 

1997)(刚去第二书店查了一下,东南大学出版社已经引入了其第二版,影印)

表12-8 

正则表达式语法

语法 

解释

字符

字符c

\unnnn, 

\xnn, 

\0n, 

\0nn, 

\0nnn 

带有十六或八进制值的代码单元

\0n 

八进制0n代表的字符(0<

=n<

=7)

\0nn 

八进制0nn代表的字符(0<

\0mnn 

八进制0mnn代表的字符(0<

=m<

=3,0<

\xnn 

十六进制 

0xnn所代表的字符

\uhhhh 

0xhhhh所代表的字符

\t, 

\n, 

\r, 

\f, 

\a, 

\e 

控制字符,依次是制表符,换行符,回车符,换页符,报警符和转义符

\cc 

控制字符中出现的相应字符c

字符类

[C1C2. 

.] 

C1、C2……中的任何字符。

Ci可以是字符,字符范围(C1-C2)或者字符类。

[^. 

字符类的补集

&

两个字符类的交集

预定义字符类

除行终止符外的任何字符(如果DOTALL标志置位,则表示任何字符)

\d 

数字[0-9]

\D 

非数字[^0-9]

\s 

空白字符[\t\n\r\f\x0B]

\S 

非空白字符

\w 

单词字符[a-zA-Z0-9_]

\W 

非单词字符

\p{name} 

一个指定的字符类,见表12-9

\P{name} 

指定字符类的补集

边界匹配符

输入的开头和结尾(在多行模式(multiline 

mode)下是行的开头和结尾)

\b 

单词边界

\B 

非单词边界

\A 

输入的开头

\z 

输入的结尾

\Z 

除最后行终止符之外的输入结尾

\G 

上个匹配的结尾

量词

X?

可选的X(即X可能出现,也可能不出现)

X* 

X,可以重复0次或多次

X+ 

X,可以重复1次或多次

X{n} 

X{n,} 

X{n,m} 

X重复n次,至少重复n次,重复n到m次

量词后缀

?

设默认(贪婪)匹配为reluctant匹配

设默认(贪婪)匹配为possessive匹配

集合操作

XY 

X的匹配后面跟着Y的匹配

X|Y 

X或Y的匹配

分组

(X) 

匹配X并且在一个自动计数的分组中捕获它

\n 

与第n个分组的匹配

转义

\c 

字符c(必须不是字母)

\Q...\E 

逐字地引用...

(?

...) 

特殊构造,看Pattern类的API

正则表达式的最简单使用是测试一个特殊的字符串是否与之匹配。

这里有一个Java写的测试程序。

首先从表示正则表达式的字符串构造一个Pattern对象。

然后从该模式获得一个Matcher对象,并且调用它的matches()方法:

Pattern 

Ppile(patternString);

Matcher 

matcher 

pattern.matcher(input);

if 

(matcher.matches()) 

.

表12.9 

预定义的字符类名(Predefined 

Character 

Class 

Names)

Lower 

小写的ASII字符[a-z]

Upper 

大写的ASCII字符[A-Z]

Alpha 

ASCII字母[A-Za-z]

Digit 

ASCII 

数字 

[0-9]

Alnum 

字母或数字[A-Za-z0-9]

Xdigit 

十六进制数字[0-9A-Fa-f] 

Print 

or 

Graph 

可打印的ASCII字符[\x21-\x7E]

Punct 

非字母或数字ASCII 

[\p{Print}&

\P{Alnum}] 

所有ASCII字符 

[\x00-\x7F]

Cntrl 

ASCII控制字符[\x00-\x1F]

Blank 

空格符或制表符[ 

\t]

Space 

空白符 

\t\n\r\f\0x0B]

javaLowerCase 

取决于Character.isLowerCase()的小写字符

javaUpperCase 

取决于Character.isUpperCase()的大写字符

javaWhitespace 

取决于Character.isWhitespace()的空白符

javaMirrored 

取决于Character.isMirrored()的Mirrored(?

) 

InBlock 

这里的Block是unicode字符的块名,用空格隔开,比如BasicLatin 

或 

Mongolian。

块名列表 

参考http:

//www.unicode.org

Category 

或InCategory 

这里的Category是Unicode字符的种类名,比如L(字母)或者Sc(货币符号)。

种类 

名列表参考http:

//www.unicode.org 

matcher的输入可以是实现CharSequence接口的任何类对象,像String,StringBuilder或CharBuffer。

当编译模式时,可以设置一个或多个标志,例如

Ppile(patternString,

Pattern.CASE_INSENSITIVE 

Pattern.UNICODE_CASE);

下面六个标志都是支持的:

CASE_INSENSITIVE:

匹配字符时与大小写无关,该标志默认只考虑US 

ASCII字符。

UNICODE_CASE:

当与CASE_INSENSITIVE结合时,使用Unicode字母匹配

MULTILINE:

^和$匹配一行的开始和结尾,而不是整个输入

UNIX_LINES:

当在多行模式下匹配^和$时,只将'

\n'

看作行终止符

DOTALL:

当使用此标志时,.符号匹配包括行终止符在内的所有字符

CANON_EQ:

考虑Unicode字符的规范等价

如果正则表达式包含分组,Matcher对象能够揭示分组边界。

方法

int 

start(int 

groupIndex)

end(int 

返回某个特殊分组的起始索引和结尾后索引(past-the-end 

index 

)。

通过调用String 

group(int 

groupIndex),你可以简单地得到匹配的字符串。

第0个分组代表所有的分组,第一个实际分组的索引是1。

调用groupCount来获得总的分组数。

使用开放圆括号来安排嵌套分组。

例如,给定模式((1?

[0-9]):

([0-5][0-9]))[ap]m,并且输入11:

59am,Matcher对象报告下列分组

((1?

([0-5][0-9]))[ap]m

并输入

11:

59am

matcher报告下列分组

分组索引 

起始 

结束 

字符串

11;

59

11

例12-9提示输入一个模式和一个欲匹配的字符串。

它将输出输入的字符串是否匹配模式。

如果输入匹配包含分组的模式,程序将会使用圆括号来打印分组边界,如((11):

(59))am

Example 

12-9. 

RegexTest.java

1. 

import 

java.util.*;

2. 

java.util.regex.*;

3.

4. 

/**

5. 

This 

program 

tests 

regular 

expression 

matching.

6. 

Enter 

strings 

match, 

hit 

Cancel

7. 

exit. 

If 

the 

contains 

groups, 

group

8. 

boundaries 

are 

displayed 

in 

match.

9. 

*/

10. 

public 

class 

RegExTest

11. 

{

12. 

static 

void 

main(String[] 

args)

13. 

14. 

Scanner 

new 

Scanner(System.in);

15. 

System.out.println("

pattern:

"

);

16. 

String 

patternString 

in.nextLine();

17.

18. 

null;

19. 

try

20. 

21. 

22. 

}

23. 

catch 

(PatternSyntaxException 

e)

24. 

25. 

syntax 

error"

26. 

System.exit

(1);

27. 

28.

29. 

while 

(true)

30. 

31. 

string 

match:

32. 

input 

33. 

(input 

== 

null 

|| 

input.equals("

)) 

return;

34. 

35. 

(matcher.matches())

36. 

37. 

Match"

38. 

matcher.groupCount();

39. 

(g 

0)

40. 

41. 

for 

(int 

0;

<

input.length();

i++)

42. 

43. 

1;

g;

j++)

44. 

(i 

matcher.start(j))

45. 

System.out.print('

('

46. 

System.out.print(input.charAt(i));

47. 

48. 

matcher.end(j))

49. 

)'

50. 

51. 

System.out.println();

52. 

53. 

54. 

else

55. 

No 

match"

56. 

57. 

58. 

通常地,你不希望匹配整个输入到某个正则表达式,而是希望在输入中找出一个或多个匹配的子字符串。

使用Matcher类的find方法来寻找下一个匹配。

如果它返回True,再使用start和end方法找出匹配的范围。

(matcher.find())

start 

matcher.start();

end 

matcher.end();

match 

input.substring(start, 

end);

例12-10用到了这种机制。

它在一个网页中定位所有的超文本引用并打印它们。

为运行程序,在命令行提供一个URL,比如

java 

HrefMatch 

12-10. 

HrefMatch.java

java.io.*;

.*;

3. 

4.

displays 

all 

URLs 

web 

page 

by

matching 

that 

describes 

the

href=...>

HTML 

tag. 

Start 

as

URL

HrefMatch

17. 

// 

get 

URL 

from 

command 

line 

use 

default

urlString;

(args.length 

0) 

urlString 

args[0];

else 

;

21.

open 

reader 

InputStreamReader 

InputStreamReader(new 

URL(urlString).openStream());

24.

read 

contents 

into 

buffer

StringBuilder 

StringBuilder();

ch;

28. 

((ch 

in.read()) 

!

-1) 

input.append((char) 

ch);

29.

search 

occurrences 

of 

pattern

3

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 英语

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1