正则表达式学习总结 — Java(一)

  • 正则表达式学习总结 — Java(二)
了解正则表达式
  • 正则表达式是一种强大而灵活的文本处理工具。使用正则表达式,我们能够以编程的方式,构造复杂的文本模式,并对输入的字符串进行搜索。一旦找到了匹配这些模式的部分,你就能够随心所欲地对它们进行处理。初学正则表达式时,其语法是一个难点,但它确实是一种简洁、动态的语言。正则表达式提供了一种完全通用的方式,能够解决各种字符串处理相关的问题:匹配、编辑以及验证

  • 很久之前,正则表达式就已经整合到标准Unix工具集之中,例如sek和awk,以及程序设计语言之中了,例如Python和Perl。而在Java中,字符串操作还主要集中于String、 StringBuffer和StringTokenizer类。与正则表达式相比较,它们只能提供相当简单的功能

Java中的正则表达式
  • 一般来说,正则表达式就是以某种方式来描述字符串,因此你可以说:”如果一个字符串含有这些东西,那么它就是我正在找的东西。” 例如,要找一个数字,它可能有一个负号在最前面,那你就写一个负号加上一个问号:-?

  • 要描述一个整数,你可以说它有一位或多位阿拉伯数字。在正则表达式中,用 \d 表示一位数字。如果在其他语言中使用正则表达式,那你立刻就能发现Java对反斜线 \ 的不同处理。在其他语言中,\\ 表示“我想要在正则表达式中插入一个普通的(字面上的)反斜线,请不要给它任何特殊的含义。” 而在Java中,\\ 的意思是“我要插入一个正则表达式的反斜线,所以其后的字符具有特殊的含义。” 例如,如果你想表示一位数字,那么正则表达式应该是 \\d 。如果你想插入一个普通的反斜线,则应该这样 \\\\ 。不过换行和制表符之类的东西只需要使用反斜线:\n \t

  • 要表示“一个或者多个之前的表达式”,应该使用+。所以,如果要表示“可能有一个负号,后面跟着一位或者多位数字”,可以这样:-?\\d+

String类中的正则工具
  • String类中内建了几个正则表达式的工具,它们的功能虽然比较单一,但也经常在实际应用中派上用场,接下来就对String类中的正则表达式工具进行详细说说明

  • Java中的String类内建了正则表达式的功能,利用该类是应用正则表达式的最简单的途径。例如,你可以检查一个String是否匹配一个正则表达式:

public static void main(String[] args) {System.out.println("-1234".matches("-?\\d+"));System.out.println("5678".matches("-?\\d+"));System.out.println("+991".matches("-?\\d+"));System.out.println("+991".matches("(-|\\+)?\\d+"));
}
/*
输出:
true
true
false
true
*/
  • 前两个字符串满足对应的正则表达式,匹配成功。第三个字符串开头有一个 + ,它也是一个合法的整数,但与对应的正则表达式却不匹配。因此,我们的正则表达式应该描述为:“可能以一个加号或减号开头”。在正则表达式中,括号有着将表达式分组的效果,而竖线 | 则表示或操作。例如,(-|\+)? 这个正则表达式表示字符串的起始字符可能是一个 - 或者 + ,也可能是二者都没有(因为后面跟着 ? 修饰符)。还有就是,因为字符 + 在正则表达式中有特殊的意义,所以必须使用 \ 将其转义,使之成为表达式中的一个普通字符

  • String类还自带了一个非常有用的正则表达式工具——split()方法,其功能是 “将字符串从正则表达式匹配的地方切开”

public static String knights ="Then, when you have found the shrubbery, you must " +"cut down the mightiest tree in the forest... " +"with... a herring!";public static void split(String regex) {System.out.println(Arrays.toString(knights.split(regex)));
}public static void main(String[] args) {split(" ");split("\\W+");split("n\\W+");
}
/*
输出:
[Then,, when, you, have, found, the, shrubbery,, you, must, cut, down, the, mightiest, tree, in, the, forest..., with..., a, herring!]
[Then, when, you, have, found, the, shrubbery, you, must, cut, down, the, mightiest, tree, in, the, forest, with, a, herring]
[The, whe, you have found the shrubbery, you must cut dow, the mightiest tree i, the forest... with... a herring!]
*/
  • 先看主函数中的第一行代码,这里使用普通的字符作为正则表达式,其中并不包括任何特殊的字符。因此第一个 split() 只是按照空格来划分字符串。而在第二个和第三个 split() 中,都使用到了 \\W ,它的意思是非单词字符(如果W变成小写,即\\w,则表示一个单词字符)。观察第二行代码的输出,它将标点字符删掉了。第三个 split() 表示,“字母 n 后面跟着一个或者多个非单词字符”。可以看到,在原始字符中,与正则表达式匹配的部分,在最终结果中都被剔除了

  • String类自带的最后一个正则表达式工具是 “替换” 。你可以只替换正则表达式第一个匹配的子串,或者是替换所有匹配的地方

public static String knights ="Then, when you have found the shrubbery, you must " +"cut down the mightiest tree in the forest... " +"with... a herring!";public static void main(String[] args) {String s = knights;System.out.println(s.replaceFirst("f\\w+", "located"));System.out.println(s.replaceAll("shrubbery | tree | herring", "banana"));
}
/*
输出:
Then, when you have located the shrubbery, you must cut down the mightiest tree in the forest... with... a herring!
Then, when you have found the shrubbery, you must cut down the mightiestbananain the forest... with... abanana!
*/
  • 第一个表达式要匹配的是,以字母 f 开头,后面跟着一个或者多个字母(注意w是小写的)。并且只替换掉第一个匹配的部分,所以 “found” 被替换成 “located” 。而第二个表达式要匹配的是三个单词中的任何一个,因为它们以竖线 “|” 分割,表示 “或” 操作,并且替换所有匹配的部分
未完待续
  • 到这里就介绍完了正则表达式的大致概念以及String类中有关正则表达式的内建功能,仅仅如此吗? No No No! String之外的正则表达式还有更丰富更强大的工具供你使用,主要就是 java.util.regex 包所提供的正则表达式工具,下一篇博客就开始进入 regex 包~

正则表达式学习总结 --- Java(一)相关推荐

  1. java正则表达式 1,Java正则表达式学习(1)

    Java正则表达式学习(一) 1.什么是正则表达式: 正则表达式(regular expressions) 是一种描述字符串集的方法,它是以字符串集中各种字符串的公有特征为依据的. 正则表达式可以用于 ...

  2. java正则表达式学习

    java正则表达式学习 一.java正则表达式 二.简单正则表达式实例 三.捕获组 四.部分正则表达式语法 一.java正则表达式 正则表达式定义了字符串的模式 正则表达式可以用来搜索.编辑或处理文本 ...

  3. 正则表达式 学习笔记4.3

    下面看看逆序环视结构: public class GeneralSix { public static void main(String[] args) { String[] strings = ne ...

  4. 正则表达式 学习笔记3.4

    第一段为合法html代码,第二段为不合法html代码.<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office ...

  5. 讲解java源码_Java学习之Java源码讲解

    关于Java中源码的学习,是不少同学头疼的知识点.本文整理了JAVA源码学习的八大要点,分别是基础知识.面向对象.异常处理.集合.综合类核心代码.JAVA8新特性.Input/Output和Java小 ...

  6. linux学 java_[操作系统]Linux学习第二步(Java环境安装)

    [操作系统]Linux学习第二步(Java环境安装) 0 2017-05-19 00:02:21 jdk版本:jdk-8u131-linux-x64.rpm 注:以下操作在root用户或具有root权 ...

  7. 正则表达式 学习笔记1.3

    书接上一回: 实例五:<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /& ...

  8. python大学课程-大学只安排了C和Python课程,是否有必要学习一下Java

    首先,编程语言与应用场景有非常紧密的联系,在大学本科期间,C语言通常是一定要学习的,而且还应该重点学习,一方面原因是掌握C语言可以阅读操作系统的源代码(Linux),从而深入了解操作系统的机制(资源调 ...

  9. 全套学习!java排序sort方法

    字节跳动 ⾯试前 ⼀⾯ ⼆⾯ ⼩结 ⾯试前 头条的⾯试是三家⾥最专业的,每次⾯试前有专⻔的HR和你约时间,确定OK后再进⾏⾯试.每次都是通过视频⾯试,因为都是之前都是电话⾯或现场⾯,所以视频⾯试还是有 ...

最新文章

  1. 4年4篇顶刊顶会论文!清华开源肖像线条画生成代码,惟妙惟肖模仿人类作画...
  2. saiku 3.8 二次开发代码整理步骤(20160727更新)
  3. CRC32碰撞解密压缩包密码的脚本
  4. 从零点五开始用Unity做半个2D战棋小游戏(三)
  5. 深入理解Python生成器(Generator)
  6. [推荐]Windows2003 Server 设置大全(一)
  7. app应用内嵌h5页面怎么直接打开safari_localstroage过多存储满的情况下应该怎么办?...
  8. mysql + IDEA + JDBC
  9. [图神经网络] 图节点Node表示---GraphSAGE与PinSAGE
  10. BZOJ1823[JSOI2010]满汉全席——2-SAT+tarjan缩点
  11. 在Tomcat中部署web项目的三种方式
  12. navicat mysql 免安装_mysql免安装版配置+navicat测试
  13. 如何请求您的Apple ID帐户数据的副本
  14. 虚拟基础架构管理——直接通过 VMware vCenter 管理 NetApp 存储操作
  15. hdu--4487--dp
  16. css怎么设置图片卷角效果,用css3制作纸张效果(外翻卷角)
  17. 细讲如何解决Idear中使用@Test时提示Junit不存在问题
  18. 2020最难求职年,程序员职场面试 “防坑指南” ,全员必备!
  19. 【笔记】Polygon mesh processing读书笔记(5)
  20. 处理IRP的几种方式

热门文章

  1. [STM32F1]基于STM32F103实现Xbox 360 Controller for Windows 之Xinput
  2. 快看漫画个性化推荐探索与实践
  3. 合并果子(fruit)
  4. java二维数组初始化(java二维数组初始化的三种方式)
  5. 计算机送别歌曲,抖音当你走上离别的车站是什么歌
  6. 给自己的hexo博客个性化Volantis主题
  7. python时间加一个月减一个月_python 下个月
  8. STM32 HAL库 PWM+DMA 驱动WS2812B彩灯(STM32F030F4P6)
  9. Kafka日记(五)RdKafka文档翻译
  10. MARKDOWN常用符号实现