java 正则表达式

[size=medium]正则表达式的关键是
创建用于"在源字符串中匹配出某些字符串"的表达式(字符串)(regex)
源字符串String input = "abcdefg";
表达式String regex = "d.*";

[b]1.正则表达式的字符结构:[/b]
1.1 x: 匹配x这个字符
1.2 \\: 匹配反斜杠\
1.3 \t, \n, \r, \e 分别匹配tab健, newline键, 回车键, 回格键

[b]2.正则表达式的字符类结构(匹配单个字符)[/b]
2.1 [abc]: 匹配a,b 或者c
2.2 [^abc]: 匹配除了a,b,c的其他字符
2.3 [a-zA-Z]: 匹配从a到z,或A到Z的字符
2.4 [a-d[m-p]]: 匹配a到d,或m到p的字符
2.5 [a-z&&[def]]: (交集)匹配d,e或f
2.6 [a-z&&[^bc]]: (子集)匹配a到z,除了b,c
2.7 [a-z&&[^m-p]]: 类似(2.6)

3.预定义的特殊字符类(匹配单个字符)
3.1 . (顿号)匹配任意字符,可包括或不包括换行符(由dotall模式决定)
3.2 \d 匹配一个数字,相当于[0-9]
3.3 \D 匹配不是数字的一个字符, 相当于[^0-9]
3.4 \s 匹配一个空格,相当于[ \t\n\x0B\f\r]
3.5 \S 相当于[^\s]
3.6 \w 匹配一个单词字符, 相当于[a-zA-Z_0-9]
3.7 \W 相当于[^\w]

[b]4.边界匹配[/b]
4.1 ^ 行首
4.2 $ 行尾
4.3 \b 字符边界
4.4 \B 不是字符边界
4.5 \A The beginning of the input
4.6 \G The end of the previous match
4.7 \Z The end of the input but for the final terminator, if any
4.8 \z The end of the input


[b]5.贪婪量词[/b]
5.1 X? 一次或0次
5.2 X* 0次或多次
5.3 X+ 一次以上
5.4 X{n} n次
5.5 X{n,} n次以上
5.6 X{n,m} n到m次

[b]6.懒惰量词[/b]
相应地在贪婪量词后加上?号
如 X??, X{n,}?


[b]7.逻辑操作[/b]
7.1 XY X followed by Y
7.2 X|Y Either X or Y
7.3 (X) X, as a capturing group
Back references
[b] \n Whatever the nth capturing group matched[/b]
[b](?:X) X, as a non-capturing group[/b]


[b]8.Backslashes, escapes, and quoting[/b]
用于escapes的反斜杠\在java的字符串解析中有特殊含义(也作为内部的escapse)
所以要使正则表达式中的"\"留下, 还需要再加一个\
例如: Pattern.compile("\\s.+\\*");

注:如果正则表达式字符串中包含特殊字符,需要使用\转义
如 . * ( ) { } | ? + ^ $ \ - ,

[b]9.Line terminators(换行符)[/b]
9.1 A newline (line feed) character ('\n'),
9.2 A carriage-return character followed immediately by a newline character ("\r\n"),
9.3 A standalone carriage-return character ('\r'),

[b]默认情况下, 正则表达式^ $会忽略换行符, 只匹配源字符串的首和尾(边界).
所以正则表达式"^.*$"并不能匹配多行的文本text, 因为默认情况下(.)不匹配换行符,
使用dotall模式"(?s)^.*$"就可以匹配全文本了.
但是如果启用多行模式(multiline)(?m)
^匹配整个源字符串首和每个换行符后面(除了源字符串最后那个),
$则匹配每个换行符前和整个源字符串尾.
例如 "(?m)^\\s*//.*$" 匹配每行的注释//...

[b]10.java相关的正则表达式[/b]
Pattern表示正则表达式对象.
Mather表示匹配结果

[/size]

String sourceInput = "i'am text..\n\t你好...城ssllk";
Pattern p = Pattern.compile("(?m)^\\s*//.*$");
Mather m = p.mather(sourceInput);
//Mather主要的方法
m.find();
m.group(int);
m.matches();

//字符串相关的正则表达式
sourceInput.replaceAll(regex,replace);
//相当于
Pattern.compile(regex).mather(sourceInput).replaceAll(replace);

sourceInput.replaceAll("^(.*)/.*$","$1");
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值