java 中的正则表达式

正则表达式是一种可以应用于文本(Java中的String)的模式。 Java提供了java.util.regex包,用于与正则表达式进行模式匹配。 Java正则表达式与Perl编程语言非常相似,并且非常易于学习。

正则表达式匹配文本(或文本的一部分),或者不匹配。
*如果正则表达式匹配文本的一部分,那么我们可以找出它是哪一部分。
**如果正则表达式复杂,那么我们可以轻松地找出正则表达式的哪一部分与文本的哪一部分匹配。

第一个例子

正则表达式“ [az] + ”与文本中的所有小写字母匹配。
[az]表示从az的任何字符,包括+,表示“一个或多个”。

假设我们提供了一个字符串“代码2学习Java教程”。

在Java中如何做

首先,您必须编译模式:
导入java.util.regex。*;
模式p = Pattern.compile(“ [az] +”);

接下来,您必须通过向模式发送消息来为文本创建匹配器
Matcher m = p.matcher(“代码2学习Java教程”);

注意 :

Pattern和Matcher都没有公共构造函数,我们通过使用Pattern类中的方法来创建它。

模式类 :模式对象是正则表达式的编译表示。 Pattern类不提供公共构造函数。 要创建模式,必须首先调用其公共静态编译方法之一,然后再返回Pattern对象。 这些方法接受正则表达式作为第一个参数。

Matcher类 :Matcher对象是解释模式并针对输入字符串执行匹配操作的引擎。 与Pattern类一样,Matcher没有定义公共构造函数。 您可以通过在Pattern对象上调用matcher方法来获得Matcher对象。

完成上述步骤后,现在有了匹配器m ,我们可以检查是否找到了匹配项,如果匹配,则从哪个索引位置开始,等等。

如果模式与整个字符串匹配,则m.matches()返回true,否则返回false。
如果模式在字符串开头匹配,则m.lookingAt()返回true,否则返回false
如果pattern与文本的任何部分匹配,则m.find()返回true

寻找匹配的东西

匹配成功后, m.start()将返回匹配的第一个字符的索引, m.end()将返回匹配的最后一个字符的索引,再加上一个。

如果未尝试匹配,或者匹配失败,则m.start()m.end()将抛出IllegalStateException
–这是一个RuntimeException,因此您不必捕获它

m.end()返回匹配的最后一个字符的索引似乎很奇怪,但这正是大多数String方法所需要的
–例如,“ 现在是时间.substring(m.start()m.end()
将返回完全匹配的子字符串。

Java程序:

import java.util.regex.*;public class RegexTest {public static void main(String args[]) {String pattern = "[a-z]+";String text = "code 2 learn java tutorial";Pattern p = Pattern.compile(pattern);Matcher m = p.matcher(text);while (m.find()) {System.out.print(text.substring(m.start(), m.end()) + "*");}}
}

输出 :代码*学习* java *教程*。

附加方法

如果m是一个匹配器,则

m.replaceFirst( replacement 返回一个新的String,其中与模式匹配的第一个子字符串已被替换
m.replaceAll(replace 返回一个新的String,其中与模式匹配的每个子字符串均已替换为replace
m.find( startIndex 从指定的索引开始查找下一个模式匹配 – m.reset()重置此匹配器 – m.reset( newText 重置此匹配器并为其提供新文本以进行检查(可以是String,StringBuffer或CharBuffer)

正则表达式语法

下表列出了Java中可用的所有正则表达式元字符语法:

子表达 火柴
^ 匹配行首。
$ 匹配行尾。
匹配除换行符以外的任何单个字符。 使用m选项还可以使其与换行符匹配。
[…] 匹配括号中的任何单个字符。
[^…] 匹配任何不在方括号中的单个字符
\一个 整个字符串的开头
\ z 整个字符串的结尾
\ Z 整个字符串的结尾,但允许的最后一行终止符除外。
回覆* 匹配0个或多个出现的前一个表达式。
重新+ 匹配1个或多个前一个
回覆? 匹配0或1个出现的前一个表达式。
重新{n} 精确匹配前一个表达式的n次出现。
re {n,} 匹配n个或多个出现的前一个表达式。
re {n,m} 至少匹配n个,最多匹配m个先前的表达式。
a | b 匹配a或b。
(回覆) 对正则表达式进行分组并记住匹配的文本。
(?: 回覆) 对正则表达式进行分组,而无需记住匹配的文本。
(?>重新) 匹配独立模式而无需回溯。
\ w 匹配单词字符。
\ W 匹配非单词字符。
\ s 匹配空格。 等效于[\ t \ n \ r \ f]。
\ S 匹配非空格。
\ d 匹配数字。 相当于[0-9]。
\ D 匹配非数字。
\一个 匹配字符串的开头。
\ Z 匹配字符串的结尾。 如果存在换行符,则匹配换行符。
\ z 匹配字符串的结尾。
\G 比赛结束点。
\ n 向后引用捕获组号“ n”
\ b 放在方括号外时匹配单词边界。 放在方括号内时,匹配退格键(0x08)。
\ B 匹配非单词边界。
\ n,\ t等 匹配换行符,回车符,制表符等。
\ Q 转义(引号)所有字符,直到\ E
\ E 结束语以\ Q开头

参考:来自JCG合作伙伴的 Java正则表达式   代码2学习博客中的Farhan Khwaja。

翻译自: https://www.javacodegeeks.com/2012/02/regular-expressions-in-java-soft.html

java 中的正则表达式

java 中的正则表达式_Java中的正则表达式–软介绍相关推荐

  1. java中正则表达式 ?=_Java中的正则表达式

    正则表达式: 正则表达式(英语:Regular Expression,在代码中常简写为regex). 正则表达式是一个字符串,使用单个字符串来描述.用来定义匹配规则,匹配一系列符合某个句法规则的字符串 ...

  2. java linux runtime 正则表达式_Java学习之正则表达式

    Java正则表达式字符串模式. 正则表达式可以用来搜索.编辑和处理文本. 正则表达式不尽限于一种语言,但在每一种语言中又细微的差别. java.util.regex包中主要有这3个类: Pattern ...

  3. java变量存储位置_java 中变量存储位置的区别

    [原文] 1.寄存器:最快的存储区, 由编译器根据需求进行分配,我们在程序中无法控制. 2. 栈:存放基本类型的变量数据和对象的引用,但对象本身不存放在栈中,而是存放在堆(new 出来的对象)或者常量 ...

  4. java可以多重继承吗_Java中的多重继承与组合vs继承

    java可以多重继承吗 有时我写了几篇有关Java继承,接口和组成的文章. 在这篇文章中,我们将研究多重继承,然后了解组成优于继承的好处. Java中的多重继承 多重继承是创建具有多个超类的单个类的能 ...

  5. java中有没有栈_Java中堆和栈有什么区别

    stack 和 heep 都是内存的一部分stack 空间小,速度比较快, 用来放对象的引用heep 大,一般所有创建的对象都放在这里.栈(stack):是一个先进后出的数据结构,通常用于保存方法(函 ...

  6. java 静态资源变量_Java中读取配置文件中的内容,并将其赋值给静态变量的方法...

    项目开发中某个功能需要抽取成方法写成一个工具类,提供给别人使用.写过工具类的人都知道,工具类中的方法一般都是静态方法,可以直接使用类名点方法名调用, 使用很方便,比如判断某个对象是否为空的方式Obje ...

  7. java 删除list元素_JAVA中循环删除list中元素的方法总结

    印象中循环删除list中的元素使用for循环的方式是有问题的,但是可以使用增强的for循环,然后今天在使用时发现报错了,然后去科普了一下,再然后发现这是一个误区.下面就来讲一讲..伸手党可直接跳至文末 ...

  8. java和equals区别_JAVA中==与equals的区别

    equals如果没有被重写的话,和==的作用是一样的,都是判断两个对象引用是否指向同一个地址.一般重写了equals()方法就表示比较它们"实际意义上相等",比较的是内容,而不是引 ...

  9. java为什么要初始化_JAVA中到底要怎么样初始化

    Java中的变量作用范围: 1. 类的属性,或者叫值域 2. 方法里的局部变量 3. 方法的参数 对于第一种变量,Java虚拟机会自动进行初始化.如果给出了初始值,则初始化为该初始值.如果没有给出,则 ...

最新文章

  1. mysql只能用一个索引_mysql只会使用到一个索引的原因
  2. hadoop分布式文件系统hdfs的概念和特性
  3. JUC多线程:synchronized锁机制原理 与 Lock锁机制
  4. mongodb可视化工具 linux,Linux中安装启动MongoDB与可视化工具
  5. mysql 中如何删除重复的数据_mysql如何快速删除重复的数据
  6. spring 的aop操作
  7. 召回粗排精排-级联漏斗(上)
  8. linux系统下虚拟机的安装
  9. python应用题_Python简单应用题
  10. 关于silverlight主题皮肤(一)
  11. 云南丽江梅里雪山泸沽湖游记攻略
  12. 4. Podfile 的解析逻辑
  13. OpenCV图像处理之直方图
  14. vc830l 说明书_有了解vc830l万用表使用方法的吗?
  15. 墨刀产品设计大赛获奖名单出炉了!作品都太强了,速来围观
  16. 关于相机(摄相头)的选用
  17. 微信怎么更新最新版本?两招搞定,别轻易卸载!
  18. 微软巨资收购Skype 网络电话行业受关注
  19. centos7升级系统内核
  20. 学习es6中class——整合阮一峰教程、MDN

热门文章

  1. C++描述杭电OJ 2009.求数列的和 ||
  2. React功能界面的组件化编码流程
  3. lombok进行有参无参构造出现的问题
  4. java谓词_在Java中谓词
  5. java 限制文本框长度_[Java教程]如何限制textarea文本框的输入字数
  6. spark sql uv_使用Spark Streaming SQL进行PV/UV统计
  7. mysql fpmmm_zabbix配fpmmm(mpm)数据传送不了问题解决
  8. 转:elasticsearch nested嵌套查询
  9. linux-basic(13)学习shell script
  10. bom .dom_MicroProfile 2.2 BOM导入支持