您的位置:首页 > 编程语言 > Java开发

java 基础--正则表达式

2017-10-13 00:00 211 查看
正则表达式30分钟入门教程   http://www.cnblogs.com/deerchao/archive/2006/08/24/zhengzhe30fengzhongjiaocheng.html
普通字符:  匹配相同的一个字符

简单的转义字符 

\n  换行

\t 制表

\\  \本身

\^ \$ \. \( \) \{ \} \? \+ \* \| \[ \]  匹配字符本身

标准符集合

能够与多种字符匹配  注意大写 是相反的意思

\d 任意数字 0-9

\w 任意数字 下划线   A-Z a-z 0-9 _ 

\s 空格、制表符、换行等空白字符

. 小数点可以匹配任意一个字符(除了换行符),假如要匹配包括 \n 在内的字符  可以用 \s\S

自定义字符集合

[] 方括号匹配方式,匹配方括号中的任意一个字符

[abc123]    匹配 a   b  c  1  2  3

[^abc]  匹配非 a  b c 的一个字符

[f-k]   匹配  f到k之间的任意字符

[^A-F0-3]  匹配非 A-F    0-3 的一个字符

特殊符号,在中括号中失去特殊意义 除了 ^ - 

标准字符集合 ,在中括号中有效,除小数点

量词

修饰匹配的次数的特殊符号

{n} 重复n次

{m,n} 重复至少m次,最多n次

{m,} 至少m次

? 零次或者一次                  非贪婪 等同于{0,1}

+ 至少一次 或者 任意次       贪婪 {1,}

* 零次              或者 任意次       {0,}

匹配次数中贪婪模式(匹配字符越多越好,默认)

匹配次数中的非贪婪模式(匹配字符越少越好,修饰匹配次数的特殊符号后面再加上?号)  如  \d{1,6}?

字符边界

匹配的不是字符而是位置,符合某种条件的位置 0宽度

^ 匹配字符串开始

$ 匹配字符串结束的地方

\b 匹配一个单词的边界  前面的字符和后面的字符 不全是\w 字母数字下划线

等于就是    与跟着的 字符不一样的    123.【】     123\b 是可以匹配到的

忽略大小写模式

匹配是忽略大小写

模式是要区分的

单行模式

整个文本看着一个字符串,只有一个开头,一个结尾

使小数点 .  可以匹配包含换行符\n在内的任意字符

多行模式

每行都是一个字符串,都有开头和结尾

在指定了MULTLINE之后,如果需要仅匹配字符串开始和结束位置,可以使用\A  和 \Z

选择符和分组

| 分支结构 匹配 左边或者右边

() 捕获组 

1》在被修饰匹配次数的时候,括号中的表达式可以作为整体被修饰

2》去匹配结果的的时候,括号中的表达式匹配到的内容可以被单独得到

3》每一对括号会分配一个编号,使用()的捕获根据左括号顺序从1开始自动编号。捕获元素编号为零的第一个捕获是由整个表达式模式匹配的文本

(?:Expression) 非捕获组 举例 (?:[a-z]{2})

一些表达式中,不得不使用(),但又不需要保存()中自表达式匹配的内容,这时可以用非捕获组来抵消使用()带来的副作用

命名分组  (?<name>xxx)  

反向引用(\nnn)nnn表示数字

每一对()会分配一个编号,使用()的不会根据左括号的顺序从1开始自动编号

通过反向引用,可以对分组已捕获的字符串进行引用

与搜索(零宽断言)

只进行子表达式的匹配,匹配内容不计入最终的匹配结果,是零宽度

这个位置应该符合某个条件。判断当前位置的前后字符,是否符合指定的条件,但不匹配前后的字符,是对位置的匹配

正则表达式匹配过程中,如果子表达式匹配到的字符内容,而非位置,并被保存到最终的匹配结果中,那么就认为这个子表达式是占有字符的;如果子表达式匹配的仅仅是位置,或者匹配的内容并不保存到最终的匹配结果中,那么就认为这个表达式是零宽度的。占有字符还是零宽度,是针对匹配的内容是否保存到最终的匹配结果中而言的。

(?=exp) 断言自身出现的位置的后面能匹配表达式exp  [a-z]+(?=ing)   

(?<=exp)
断言自身出现的位置的前面能匹配表达式exp

(?!exp)
断言自身出现的位置的后面不能匹配表达式exp

(?<!exp)
断言自身出现的位置的前面不能匹配表达式exp

个人理解: =后面是匹配   !是不匹配   

java.uti.regex

Pattern

正则表达式的编译表示形式

Pattern p = Pattern.compile(r,int);//建立正则表达式,并启用相应的模式    r正则表达式

类Matcher

通过解释Pattern对 character sequence执行匹配操作的引擎

Matcher m = p.matcher(str); //匹配str字符串

boolean reslult = m.matches();//尝试将整个字符序列与该模式匹配

boolean  result2 = m.find();//查找与该模式匹配的下一个子序列

m.group();返回找到的内容 group中填写分组编号 可取出对应分组数据

([a-z])([0-9])   abc123    

group(1)  的值为 abc

group92) 则为 123

使用group获取数据前需先执行find方法

m.replaceAll("#");//替换

String.split("\\d");//可以用正则切分
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: