关于java:学习笔记Java正则表达式

40次阅读

共计 1849 个字符,预计需要花费 5 分钟才能阅读完成。

本文参考菜鸟教程的文章 https://www.runoob.com/java/java-regular-expressions.html

为什么要用正则表达式?


在编写解决字符串的程序时,常常会有查找合乎某些简单规定的字符串的须要。正则表达式就是用于形容这些规定的工具。换句话说,正则表达式就是记录文本规定的代码。计算机解决的信息更多的时候不是数值而是字符串,正则表达式就是在进行字符串匹配和解决的时候最为弱小的工具,绝大多数语言都提供了对正则表达式的反对。


集体认为学习正则表达式须要把握的常识前提是:

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() 能够输入以后匹配地位的指标字符串的起止地位
输入后果如下:

正文完
 0