java正则表达式笔记_【学习笔记】Java正则表达式

为什么要用正则表达式?

在编写处理字符串的程序时,经常会有查找符合某些复杂规则的字符串的需要。正则表达式就是用于描述这些规则的工具。换句话说,正则表达式就是记录文本规则的代码。计算机处理的信息更多的时候不是数值而是字符串,正则表达式就是在进行字符串匹配和处理的时候最为强大的工具,绝大多数语言都提供了对正则表达式的支持。

个人认为学习正则表达式需要掌握的知识前提是:1. Java String(用于操作)

2. 自动机(工作原理)

知识点回顾:1. 定义:正则表达式定义了字符串的模式。

2. 使用场景:正则表达式可以用来搜索、编辑或处理文本。

3. 灵活性:正则表达式并不仅限于某一种语言,但是在每种语言中有细微的差别。

Java正则表达式 三大类:

String、Pattern、Matcher

String: 存储字符串

Pattern:存储匹配模式

Matcher:存储匹配结果

当我们利用String和Pattern生成了Matcher之后,后续的操作以使用Java为我们提供的Matcher类中各种方法为主。

下面通过几个例子演示如何使用Java 正则表达式解决问题。我们拿《三国演义》中《三英战吕布》的情节来说明,原文如下:正议间,吕布复引兵搦战。八路诸侯齐出。公孙瓒挥槊亲战吕布。战不数合,瓒败走。吕布纵赤兔马赶来。那马日行千里,飞走如风。看看赶上,布举画戟望瓒后心便刺。傍边一将,圆睁环眼,倒竖虎须,挺丈八蛇矛,飞马大叫:“三姓家奴休走!燕人张飞在此!”吕布见了,弃了公孙瓒,便战张飞。飞抖擞精神,酣战吕布。连斗五十余合,不分胜负。云长见了,把马一拍,舞八十二斤青龙偃月刀,来夹攻吕布。三匹马丁字儿厮杀。战到三十合,战不倒吕布。刘玄德掣双股剑,骤黄鬃马,刺斜里也来助战。这三个围住吕布。转灯儿般厮杀。八路人马,都看得呆了。吕布架隔遮拦不定,看着玄德面上,虚刺一戟,玄德急闪。吕布荡开阵角,倒拖画戟,飞马便回。三个那里肯舍,拍马赶来。八路军兵,喊声大震,一齐掩杀。吕布军马望关上奔走;玄德、关、张随后赶来。古人曾有篇言语,单道着玄德、关、张三战吕布。

如果要找出所有的“吕布”,那么我们的匹配规则可以这样给出:".\吕布.\"

如果我们想要查询字符串中一共出现了多少次吕布,代码可以这样写:public class RegixTest {

public static String text = "正议间,吕布复引兵搦战。八路诸侯齐出。公孙瓒挥槊亲战吕布。战不数合,瓒败走。吕布纵赤兔马赶来。那马日行千里,飞走如风。看看赶上,布举画戟望瓒后心便刺。傍边一将,圆睁环眼,倒竖虎须,挺丈八蛇矛,飞马大叫:“三姓家奴休走!燕人张飞在此!”吕布见了,弃了公孙瓒,便战张飞。飞抖擞精神,酣战吕布。连斗五十余合,不分胜负。云长见了,把马一拍,舞八十二斤青龙偃月刀,来夹攻吕布。三匹马丁字儿厮杀。战到三十合,战不倒吕布。刘玄德掣双股剑,骤黄鬃马,刺斜里也来助战。这三个围住吕布。转灯儿般厮杀。八路人马,都看得呆了。吕布架隔遮拦不定,看着玄德面上,虚刺一戟,玄德急闪。吕布荡开阵角,倒拖画戟,飞马便回。三个那里肯舍,拍马赶来。八路军兵,喊声大震,一齐掩杀。吕布军马望关上奔走;玄德、关、张随后赶来。古人曾有篇言语,单道着玄德、关、张三战吕布。";

public static String regix = "[u4e00-u9fa5]*吕布[u4e00-u9fa5]*";

public static void main(String[] args) {

Pattern pattern = Pattern.compile(regix);

Matcher matcher = pattern.matcher(text);

int count = 0;

while(matcher.find()){

System.out.println("吕布 出现位置:");

System.out.print(matcher.start() + "," + matcher.end());

count++;

}

System.out.println("文中一共出现了" + count + "次 吕布");

}

}

[u4e00-u9fa5]表示一个中文字符,包括中文标点符号。

matcher.find() 可以找到下一个匹配的位置

mather.start()/end() 可以输出当前匹配位置的目标字符串的起止位置

输出结果如下:

e34bfc329157134bbfc335d0b9dbcfa8.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值