regex正则表达式相关知识点

(自己整理的关于正则的知识点,部分摘自网上)
正则表达式的知识要点
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); //操作字符串 得到返回的字符串数组

(未完)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值