您的位置:首页 > 其它

regex正则表达式相关知识点

2013-05-03 14:50 239 查看
(自己整理的关于正则的知识点,部分摘自网上)

正则表达式的知识要点

1.正则表达式是什么?

正则表达式是一种可以用于模式匹配和替换的强有力的工具。

2.正则表达式的优点?

更少的代码,更高的效率。

3.正则表达式如何使用?

网上示例多的是

4.正则表达式的缺点?

需要花一定的时间学习,这个时间由个人决定,一天或者更久一些。

正则表达式可以用来:

(1)验证字符串是否符合指定特征,比如验证是否是合法的邮件地址。

(2)用来查找字符串,从一个长的文本中查找符合指定特征的字符串,比查找固定字符串更加灵活方便。

(3)用来替换,比普通的替换更强大。

正则表达式的各种符号其含义(注意反斜杠要写两次,例如\d写为\\d))

\s
空格字符(空格键,tab,换行,换页,回车)

\d 一个数字,相当于[0-9]

\D 一个非数字的字符,相当于[^0-9]

\w
一个单词字符,相当于[a-zA-Z_0-9]

\W
一个非单词的字符,[^\w]

表示次数的符号

*重复零次或更多次例:a* 匹配零个或多个a

+重复一次或多次例:a+匹配一个或者多个a

?重复零次或一次例:a?匹配零个或一个a

{n}重复n次例:a{4}匹配4个a

{n,}重复n次或更多次例:a{4,}匹配至少4个a

{n,m}重复n到m次例:a{4,10}匹配4-10个a

^
一行的开始 请在正则表达式的开始处使用^。例如:^(abc)表示以abc开头的字符串。

$一行的结尾 请在正则表达式的结束处使用。例如:(^bca).*(abc$)表示以bca开头以abc结尾的行。

\b 一个单词的边界

\B
一个非单词的边界

\G
前一个匹配的结束

\r,\n 代表回车和换行符

\t制表符

. 小数点可以匹配除了换行符(\n)以外的任意一个字符

[]匹配方括号内的一个字符 例:[ab5@]匹配 "a" 或 "b" 或 "5" 或 "@";[f-k] 匹配
"f"~"k" 之间的任意一个字母

还有其他一些在后边章节中有特殊用处的标点符号,在前面加 "\" 后,就代表该符号本身。

比如:^, $ ,. 都有特殊意义,如果要想匹配字符串中 "^" 和 "$" ,"."字符,则表达式就需要写成 "\^" 和 "\$","\."。

一些符号可以影响表达式内部的子表达式之间的关系:

左右两边表达式之间 "或" 关系,匹配左边或者右边 例:表达式 "Tom|Jack" 在匹配字符串 "I'm Tom, he is Jack" 时,匹配结果是:成功

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

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

例:表达式 "¥(\d+\.?\d*)" 在匹配 "$10.9,¥20.5" 时,匹配的结果是:成功;匹配到的内容是:"¥20.5"

常用的表达式属性设置简介:Ignorecase,Singleline,Multiline,Global

表达式属性 说明

Ignorecase 默认情况下,表达式中的字母是要区分大小写的。配置为 Ignorecase 可使匹配时不区分大小写。有的表达式引擎,把
"大小写" 概念 延伸至 UNICODE 范围的大小写。

Singleline 默认情况下,小数点 "." 匹配除了换行符(\n)以外的字符。配置为 Singleline 可使小数点可匹配包括换行符在

内的所有字符。

Multiline

默认情况下,表达式 "^" 和 "$" 只匹配字符串的开始 ① 和结尾 ④ 位置。如:
①xxxxxxxxx②\n
③xxxxxxxxx④

配置为 Multiline 可以使 "^" 匹配 ① 外,还可以匹配换行符之后,下一行开始前 ③ 的位置,使 "$" 匹配 ④ 外,还可以匹配换行符之 前,一行结束 ② 的位置。

Global 主要在将表达式用来替换时起作用,配置为 Global 表示替换所有的匹配。

在表达式中有特殊意义,需要添加 "\" 才能匹配该字符本身的字符汇总

如果要要求表达式所匹配的内容是整个字符串,而不是从字符串中找一部分,

那么可以在表达式的首尾使用 "^" 和 "$",比如:"^\d+$" 要求整个字符串只有数字。

如果要求匹配的内容是一个完整的单词,而不会是单词的一部分,

那么在表达式首尾使用 "\b",比如:使用 "\b(if|while|else|void|int……)\b" 来匹配程序中的关键字。

表达式不要匹配空字符串。否则会一直得到匹配成功,而结果什么都没有匹配到。

比如:准备写一个匹配 "123"、"123."、"123.5"、".5" 这几种形式的表达式时,整数、小数点、小数数字都可以省略,

但是不要将表达式写成:"\d*\.?\d*",因为如果什么都没有,这个表达式也可以匹配成功。更好的写法是:"\d+\.?\d*|\.\d+"。

正则表达式实例

java正则表达式通过java.util.regex包下的Pattern类与Matcher类实现;

1).构造一个模式 Pattern pattern=Pattern.compile(regex);

2).建造一个匹配器Matcher matcher=p.matcher(str);

3).进行判断,得到结果boolean boo=matcher.matches();

(String 类的matches()方法也可以匹配正则表达式)

Matcher类提供三个匹配操作方法,三个方法均返回Boolean类型,当匹配到时返回true,否则返回false

1).matcher.matches() matches()对整个字符串进行匹配,只有整个字符串都匹配了才返回true

2).matcher.lookingAt() lookingAt()对前面的字符串进行匹配,只有匹配到的字符串在最前面才返回true

3).matcher.find()find()对字符串进行匹配,匹配到的字符串可以在任何位置

Matcher类的其他方法



int groupcount()
返回此匹配器模式中的捕获组数。

String replaceAll(String replacement)
用给定的replacement全部替代匹配的部分

String repalceFirst(String replacement)用给定的replacement替代第一次匹配的部分

appendReplacement(StringBuffer sb,String replacement)

根据模式用replacement替换相应内容,并将匹配的结果添加到sb当前位置之后

StringBuffer appendTail(StringBuffer sb) 将输入序列中匹配之后的末尾字串添加到sb当前位置之后.

group(n) 0代表永远都是匹配整个表达式的字符串的那部分 n<>0时代表第n组匹配的部分

①字符匹配

Pattern p = Pattern.compile(expression); // 正则表达式

Matcher m = p.matcher(str); // 操作的字符串

boolean b = m.matches(); //返回是否匹配的结果

System.out.println(b);

②分割字符串

Pattern pattern = Pattern.compile(expression); //正则表达式

String[] strs = pattern.split(str); //操作字符串 得到返回的字符串数组

(未完)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: