加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

regex正则表达式相关知识点

发布时间:2020-12-14 02:23:11 所属栏目:百科 来源:网络整理
导读:(自己整理的关于正则的知识点,部分摘自网上) 正则表达式的知识要点 1.正则表达式是什么? 正则表达式是一种可以用于模式匹配和替换的强有力的工具。 2.正则表达式的优点? 更少的代码,更高的效率。 3.正则表达式如何使用? 网上示例多的是 4.正则表达式
(自己整理的关于正则的知识点,部分摘自网上)
正则表达式的知识要点
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); //操作字符串 得到返回的字符串数组

(未完)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读