Java中正则表达式的学习
正则表达式简介
正则表达式定义了字符串的模式,可以用来搜索、编辑和处理文本。正则表达式并不仅限于某一种语言。
官网地址:https://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html
常见的字符匹配
表达式 | 可匹配 |
---|---|
\r、\n | 回车和换行符 |
\t | 制表符 |
\ | 代表“\”本身 |
\d | 0-9中的任意一个数字 |
\w | 任意一个字母或数字或下划线 即A-Z a-z 0-9、_中任意一个 |
\s | 匹配空格、制表符、换页符等空白字符的其中任意一个 |
. | 匹配除了换行符(\n)以外的任意一个字符 |
\S | 匹配所有非空白字符(\s取反的意思) |
\D | 匹配所有非数字字符(\d取反) |
\W | 匹配所有的数字 字母 下划线以外的字符(\w取反) |
\B | 匹配非单词边界,即左右两边都是“\w”范围或者左右两边都不是"\w"范围 |
包含指定字符的匹配
表达式 | 可匹配 |
---|---|
[xy5#] | 匹配"x"或"y"或"5"或“#” |
[^jcd] | 匹配j,c,d之外的任意一个字符 |
o-z | 匹配o-z之间的任意一个字母 |
^A-G0-5 | 匹配A-F,0-3之外的任意一个字符 |
\D | 匹配所有非数字字符(\d取反) |
匹配特定位置
表达式 | 作用 |
---|---|
^ | 与字符串考开始的地方匹配,不匹配任何字符(注意与[^]区分) |
$ | 与字符串结束的地方进行匹配,不匹配任何字符 |
\b | 匹配一个单词边界,即单词和空格之间的位置,不匹配任何字符 |
修饰匹配次数的特殊字符
表达式 | 作用 |
---|---|
{n} | 表达式重复n次。比如f{4}相当于ffff,"\w{2}“相当于”\w\w" |
{m,n} | 表达式至少重复m次,最多重复n次。比如:“hu{2}”可匹配"hu",“huu”,“huuu” |
{m,} | 表达式至少重复m次。例如:“\w\d{2,}“可以匹配”a12","_478",R7236 |
? | 匹配表达式0次或1次,相当于{0,1}。比如:”a[cd]?“可匹配”a“,“ac”,“ad” |
+ | 表达式至少出现1次,相当于{1,}。比如:”a+b“可匹配"ab",“aab”,“aaab” |
* | 表达式不出现或出现任意次,相当于{0,},比如:”^*b“可匹配”b“,"^^^b" |
匹配次数的贪婪与非贪婪
贪婪:尽量匹配多个而不是一个
非贪婪:如果一个表达式能匹配多个或一个的时候,尽量匹配一个而不是多个。
举个栗子:
String line="eeeefffffrrrrrrrrr";
Pattern regex=Pattreern.compile("r{4,}")//贪婪
//Pattern regex=Pattreern.compile("r{4,}?") //非贪婪
Matcher mat=regex.matches(line);
System.out.println(mat.group());
输出结果为
贪婪:rrrrrrrrr(将所有的r输出)
非贪婪:rrrrrrrr
表达式 | 表达结果 |
---|---|
{d}(w+) | "w+"将匹配第一个"d"之后的所有字符”xxxdxxxd“ |
(d)(w+)(d) | "w+"将匹配第一个d和最后一个d之间的所有字符 |
匹配特殊字符(只需要加斜杠进行转义)
表达式 | 可匹配 |
---|---|
\^ | 匹配^符号本身 |
\$ | 匹配$符号本身 |
\. | 匹配小数点本身 |
子表达式的关系
表达式 | 作用 |
---|---|
∣\vert∣ | 左右两边表达式之间”或“关系,匹配左边或者右边 |
() |
1.在被修饰匹配次数的时候,括号中的表达式可作为整体被修饰。 2.取匹配结果的死后,括号中的表达式匹配到的内容可以被单独得到 |
CJ:反向引用\1,\2…
小括号“()”包含的表达式所匹配的字符串,不仅在匹配结束后可以使用,在匹配过程中也可使用。表达式后面的部分可以引用前面“括号内已经匹配到的字符串”。
引用方法:“\”加上一个数字,“\1”引用第一对括号内匹配的字符串,“\2”引用第而对括号内匹配到的字符串…以此类推。如果一对括号内包含另一对括号,则外层的括号先排序号。
<h1>Hello World!<h1><p>Hi My name is Mike</p><span>Nice to meet you</span>
则正则表达式"<(.+).*(\1)>"中的后面小括号中的\1对应前面括号(.+)的内容。作用:匹配上述html代码中的所有标签h1 p span
正向预搜索&反向预搜索
正向预搜索:匹配的是右侧的一个位置
String line="hello java best,java test,java good java and python";//Pattern pattern=Pattern.compile("java\\s(?=good)");Matcher mat=pattern.matcher(line);while(mat.find()){System.out.println(mat.group());System.out.println(line.substring(mat.end()-1));}输出结果为://匹配的是后面有good的javajava good java and python
修改上述语句:
Pattern pattern=Pattern.compile("java\\s(?!good)");
输出结果://匹配的是java是后面不是good的java
java best,java test,java good java and python
java test,java good java and python
java and python
反向预搜索(向往串相反的方向搜索)
Pattern pattern=Pattern.compile("(?<=(hello\\s))java");
输出结果://匹配第一个java
java
a best,java test,java good java and python
Pattern pattern=Pattern.compile("(?<!(hello\\s))java");
输出结果://匹配除第一个的所有java
java
a test,java good java and python
java
a good java and python
java
a and python
栗子:
例1:
"^[-_0-9a-zA-Z]*@[0-9a-zA-Z]{2,10}\\.[a-z]{2,5}$"//邮箱校验
// 开始匹配0个或多个数字或字母,@之后是数字字母长度2到10,点之后匹配类似与域名长度在2到5之间。
例2:
"(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[!@#$]).{8,16}"//密码校验
//密码一般包含数字 字母大小写 包含特殊字符。其长度为8-16位
注意事项:
1.正则表达式中的斜杠用\表示,所以java字符串里的"\"在正则中为\\。
2.正则表达式的特殊字符需要转义,如:\\*表示*
Java中正则表达式的学习相关推荐
- 1000行代码徒手写正则表达式引擎【1】--JAVA中正则表达式的使用
简介: 本文是系列博客的第一篇,主要讲解和分析正则表达式规则以及JAVA中原生正则表达式引擎的使用.在后续的文章中会涉及基于NFA的正则表达式引擎内部的工作原理,并在此基础上用1000行左右的JAVA ...
- Java中正则表达式的使用
JAVA中正则表达式的使用 如果出现连续相同的要分割的字符,那么会出现空字符串 1.split方法 2.pattern类编译正则3.matches类匹配正则 public class RegexTes ...
- java中转义字符的学习---(多看几遍就会了系列)
java中转义字符的学习-(多看几遍就会了系列) java中常见的转义字符– 符号 含义 \n 换行 \t 制表符 \r 回车 \b 退格 代码演示: public class a {public s ...
- java中正则表达式的应用
java中正则表达式的应用 判断功能 public boolean matches(String regex) 分割功能 public String[] split(String regex) 替换功 ...
- Java中字符串的学习(一)String类的概述及常见方法使用
转载请注明出处http://www.cnblogs.com/devtrees/p/4347079.html (拓展:Api:编程语言对外给我们提供的应用程序接口.) 一.概述: 我们平时上网发帖,帖子 ...
- Java中正则表达式、模式匹配与信息抽取
引言 记得几年前在做网页爬虫后的信息抽取时,针对网页源码中隐藏的要提取的信息,比如评论.用户信息等属性信息,直接利用HtmlParser得到.如此做倒是简单,不过利用的是网页的规范的tag标记.其实j ...
- java中正则表达式以及Pattern和Matcher
正则匹配 // 反斜杠 /t 间隔 ('/u0009') /n 换行 ('/u000A') /r 回车 ('/u000D') /d 数字 等价于[0-9] /D 非数字 等价于[^0-9] /s 空白 ...
- Java中的equals学习小结
Java中的equals是十分重要的,和= =要区别开来,最近在看孙卫琴的JAVA面向对象编程一书,觉得对其阐述写的不错,所以现在小结其 主要内容,而且要将 = =和 equals列为重要的对比概念来 ...
- java中正则表达式,编译报错:Invalid escape sequence (valid ones are \b \t \n \f \r \ \' \\ )...
转自:https://www.cnblogs.com/EasonJim/p/6561666.html 若出现:Invalid escape sequence (valid ones are \b ...
最新文章
- 【转】窗口之间的主从关系与Z-Order
- (C#) 调用执行批处理文件
- Matlab——GUI程序操作说明
- 开源会议系统openmeetings安装
- http sxyk.cdn_Discuz x3 开启cdn和https后链接修改教程
- Jenkins 流水线 获取git 分支列表_Jenkins扩展共享库进阶
- 惠普g260鼠标宏软件_电竞外设再添新成员,微星DS102电竞鼠标正式发布
- 结合nginx源码学习error_page和proxy 指令的关系
- DevExpress换肤功能使用方法
- Rust: tokio,异步代码与运行速度初探
- 【pytorch目标检测】FPN网络结构
- 微型计算机硬件系统包括什么,微型计算机硬件系统由什么组成(6个基本组成部件)...
- 电脑开机太慢?这5个方法瞬间提升你的电脑速度
- 【python】HTTP压力测试过程中遇到的问题与解决方案
- itext 在已知页码的情况下,往pdf中添加图片,实测有效,下面贴出代码
- pytorch b站练习-5
- 我的HIFI WAV 播放器设计之二电路图数字电路部分
- 真实机下 ubuntu 18.04 安装anaconda+cuDNN+pytorch以及其版本选择(亲测非常实用)
- java 构造方法能被继承吗_Java中构造函数可以被继承么
- 海量向量搜索引擎 Milvus 开源啦
热门文章
- 丢失/root目录导致命令行-bash-4.1#,解决方法
- flex伸缩布局盒模型总结
- linux无法解析主机地址(could not resolve host)解决办法
- mfc---手动给toolbar按钮添加消息View中
- 设备节点注册和操作方法连接
- Linux10-归档、系统间复制文件
- 区块链中的“智能合约”有何应用?
- craigslist_Craigslist,Wikipedia和丰富经济
- 夏天和空调_您可以在今年夏天开始学习650项免费的在线编程和计算机科学课程...
- idea自动捕获_Smilefie:如何通过检测微笑来自动捕获自拍