当前位置: 首页 > news >正文

java正则表式的使用

概念

正则表达式

在阅读本文前,你应该已经了解了正则表达式的基本概念以及如何书写正则表达式。如果对正则表达式不是太了解,或者想更深入地了解正则表示式,请点击这里。

捕获组

捕获组能够让我们方便地从正则表达式中提取出我们需要的内容。捕获组根据字符出现的顺序,从左往右开始进行编号。例如正则表达式((A)(B(C))), 其捕获组分别为:

  1. ((A)(B(C)))
  2. (A)
  3. (B(C))
  4. (C)

一个捕获组通常是用括号包起来的部分,其中整个正则表示式是第一个捕获组,可以选择用括号包起来,也可以不用括号。除第一个捕获组之外,其他捕获组都需用括号包起来。

详解Java正则表示式的使用

包简介

java.util.regex包中有一个interface,两个class和一个exception,分别是

  • MatchResult
  • Pattern
  • Matcher
  • PatternSyntaxException

其中,MatchResult是interface, Matcher实现了这个interface。Pattern和Matcher是class,Pattern是一个正则表达式经编译后的表现模式,Matcher是一个状态机器。

Pattern

compile(String regex) / compile(String regex, int flags)

静态方法,把一个正则表示式编译后,生成一个Pattern对象实例

Patter p = Pattern.compile("\\d{2}");
p.pattern();  //返回 \d{2}

matcher(CharSequence input)

生成一个Matcher对象。Matcher类时不能直接实例化的,可以通过此方法实例化一个Matcher对象,从而进行各种操作。

matches(String regex, CharSequence input)

直接使用正则表达式对输入的字符串进行匹配,匹配成功则返回true

split(CharSequence input) / split(CharSequence input, int limit)

使用正则表示式,进行字符串分割

Matcher

find() / find(int start) / lookingAt()/matches()

进行匹配操作,如果匹配成功,这三个方法都会返回true.其中,find()是在源字符串中找出和正则表达式匹配的字符串。find(int start)是从start位置开始寻找下一个匹配的字符串。lookingAt()是从源字符串的第一个字符进行匹配。matches()是对整个源字符串中进行匹配,如果都匹配才返回true。

String str="abcd23"

Pattern.matches("\\w{4}\d{2}",str); //快捷方式

Pattern p = Pattern.compile("\\w{4}\d{2}");
Matcher m = p.matcher(str); //和上面的方法等价
m.matches();

group() / start() / end()

当使用find() / find(int start) / lookingAt() / matches()进行匹配操作并返回true之后,才可以执行者三个方法获取更加详细的信息。
group():返回匹配到的字符串
start():返回匹配到的字符串在源字符串中的位置
end(): 返回匹配到的字符串的最后一个字符在源字符串中的位置
另外这几个方法分别有一个重载方法 group(int i) / start(i) / end(i), 分别用于对第i个捕获组进行对应的操作

replaceAll(String replacement) / replaceFirst(String replacement)

替换源字符串中和正则表达式匹配的子字符串。其中replaceAll是替换所有的,replaceFirst是替换第一个匹配的。

相关文章:

  • grub修复
  • (转)es进行聚合操作时提示Fielddata is disabled on text fields by default
  • LXD 2.0系列之二:LXD安装和配置
  • Java调用JavaFX的方法
  • ORA-04089: 无法对 SYS 拥有的对象创建触发器
  • Java获取URL中的顶级域名domain的工具类
  • CSS实现空心三角指示箭头
  • TPYBoard开发板ADC数模转换一: 初识ADC使用
  • no.4 数据和C 06
  • W3School Redis教程(安装/基本操作/高级操作/命令/官方文档/官方集群教程)
  • Go语言与数据库开发:01-06
  • js 日期计算
  • vue 请求后台数据
  • Unity3D-RayMarch-几何图元-3添加阴影
  • es6--symbol
  • ES6指北【2】—— 箭头函数
  • hexo+github搭建个人博客
  • 【407天】跃迁之路——程序员高效学习方法论探索系列(实验阶段164-2018.03.19)...
  • 【附node操作实例】redis简明入门系列—字符串类型
  • 2017年终总结、随想
  • 2018以太坊智能合约编程语言solidity的最佳IDEs
  • Java 11 发布计划来了,已确定 3个 新特性!!
  • JavaScript 无符号位移运算符 三个大于号 的使用方法
  • Javascript 原型链
  • java架构面试锦集:开源框架+并发+数据结构+大企必备面试题
  • KMP算法及优化
  • mongodb--安装和初步使用教程
  • vue.js框架原理浅析
  • Vue2.0 实现互斥
  • vue-cli在webpack的配置文件探究
  • WinRAR存在严重的安全漏洞影响5亿用户
  • 和 || 运算
  • 互联网大裁员:Java程序员失工作,焉知不能进ali?
  • 机器学习 vs. 深度学习
  • 将 Measurements 和 Units 应用到物理学
  • 理解IaaS, PaaS, SaaS等云模型 (Cloud Models)
  • 世界编程语言排行榜2008年06月(ActionScript 挺进20强)
  • 收藏好这篇,别再只说“数据劫持”了
  • 网络应用优化——时延与带宽
  • 微服务核心架构梳理
  • 想晋级高级工程师只知道表面是不够的!Git内部原理介绍
  • 因为阿里,他们成了“杭漂”
  • ionic异常记录
  • #if #elif #endif
  • #ifdef 的技巧用法
  • $ is not function   和JQUERY 命名 冲突的解说 Jquer问题 (
  • (2/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (32位汇编 五)mov/add/sub/and/or/xor/not
  • (Redis使用系列) SpringBoot中Redis的RedisConfig 二
  • (二) Windows 下 Sublime Text 3 安装离线插件 Anaconda
  • (五)IO流之ByteArrayInput/OutputStream
  • (转)大型网站架构演变和知识体系
  • ../depcomp: line 571: exec: g++: not found
  • ..回顾17,展望18
  • .NET Core 成都线下面基会拉开序幕