java正则表达式用法示例_Java正则表达式教程及示例
java正则表达式用法示例
当我开始使用Java时,正则表达式对我来说是一场噩梦。 本教程旨在帮助您掌握Java正则表达式,并让我定期返回以刷新我的正则表达式学习。
什么是正则表达式?
正则表达式定义字符串的模式。 正则表达式可用于搜索,编辑或处理文本。 正则表达式不是特定于语言的,但是每种语言的正则表达式略有不同。 Java正则表达式与Perl最相似。
Java正则表达式类存在于java.util.regex软件包中,该软件包包含三个类: Pattern , Matcher和PatternSyntaxException 。
1.模式对象是正则表达式的编译版本。 它没有任何公共构造函数,我们使用它的公共静态方法编译通过传递正则表达式参数来创建模式对象。
2. Matcher是将输入的字符串模式与创建的模式对象进行匹配的正则表达式引擎对象。 此类没有任何公共构造函数,并且我们使用模式对象匹配器方法(将输入String作为参数)来获得Matcher对象。 然后,我们使用matchs方法,该方法根据输入的String是否匹配正则表达式模式返回布尔结果。
3.如果正则表达式语法不正确,则会引发PatternSyntaxException。
让我们通过一个简单的示例查看所有这些类的作用:
package com.journaldev.util;import java.util.regex.*;public class PatternExample {public static void main(String[] args) {Pattern pattern = Pattern.compile('.xx.');Matcher matcher = pattern.matcher('MxxY');System.out.println('Input String matches regex - '+matcher.matches());// bad regular expressionpattern = Pattern.compile('*xx*');}}
上面程序的输出是:
Input String matches regex - true
Exception in thread 'main' java.util.regex.PatternSyntaxException: Dangling meta character '*' near index 0
*xx*
^at java.util.regex.Pattern.error(Pattern.java:1924)at java.util.regex.Pattern.sequence(Pattern.java:2090)at java.util.regex.Pattern.expr(Pattern.java:1964)at java.util.regex.Pattern.compile(Pattern.java:1665)at java.util.regex.Pattern.(Pattern.java:1337)at java.util.regex.Pattern.compile(Pattern.java:1022)at com.journaldev.util.PatternExample.main(PatternExample.java:13)
由于正则表达式围绕String展开,因此Java 1.4中对String类进行了扩展,以提供进行模式匹配的match方法。 在内部,它使用Pattern和Matcher类进行处理,但是显然,它减少了代码行。
模式类还包含matchs方法,该方法以正则表达式和输入String作为参数,并在匹配它们后返回布尔结果。
因此,以下代码可以很好地将输入String与正则表达式匹配。
String str = 'bbb';System.out.println('Using String matches method: '+str.matches('.bb'));System.out.println('Using Pattern matches method: '+Pattern.matches('.bb', str));
因此,如果您只需要检查输入的String是否与模式匹配,则应使用简单的String Match方法来节省时间。 仅在需要操纵输入String或需要重用模式时,才使用Pattern和Matches类。
请注意,由正则表达式定义的模式从左到右应用于字符串,并且一旦在匹配项中使用了源字符,就无法重用它。
例如,正则表达式“ 121”将匹配“ 31212142121”的次数是“ _121____121”的两倍。
正则表达式常见的匹配符号
正则表达式 | 描述 | 例 |
。 | 匹配任何单个符号,包括所有内容 |
(“ ..”,“。a%”)– true(“ ..”,“。a”)– true
(“ ..”,“ a”)–否 |
^ xxx | 在行首匹配xxx正则表达式 |
(“ ^ ac”,“ abcd”)– true(“ ^ a”,“ a”)– true
(“ ^ a”,“ ac”)–否 |
xxx $ | 在行尾匹配正则表达式xxx |
(“ ..cd $”,“ abcd”)–真实(“ a $”,“ a”)–真实
(“ a $”,“ aca”)–否 |
[abc] | 可以匹配字母a,b或c。 []被称为字符类。 |
(“ ^ [abc] d。”,“ ad9”)–正确(“ [ab] .d $”,“坏”)–正确
(“ [ab] x”,“ cx”)–否 |
[abc] [12] | 可以匹配a,b或c,然后匹配1或2 |
(“ [ab] [12]。”,“ a2#”)– true(“ [ab] .. [12]”,“ acd2”)– true
(“ [ab] [12]”,“ c2”)–否 |
[^ abc] | 当^是[]中的第一个字符时,它会否定模式,匹配除a,b或c之外的任何其他字符 |
(“ [[^ ab] [^ 12]。”,“ c3#”)–真(“ [[^ ab] .. [^ 12]”,“ xcd3”)–真
(“ [^ ab] [^ 12]”,“ c2”)–否 |
[a-e1-8] | 匹配范围从a到e或1到8 |
(“ [a-e1-3]”,“ d#”)–真(“ [a-e1-3]”,“ 2”)-真
(“ [a-e1-3]”,“ f2”)–否 |
xx | yy | 匹配正则表达式xx或yy |
(“ x。| y”,“ xa”)– true(“ x。| y”,“ y”)
(“ x。| y”,“ yz”)–否 |
Java正则表达式元字符
正则表达式 | 描述 |
\ d | 任何数字,少于[0-9] |
\ D | 任何非数字,是[^ 0-9]的缩写 |
\ s | 任何空格字符,是[\ t \ n \ x0B \ f \ r]的缩写 |
\ S | 任何非空白字符,是[^ \ s]的缩写 |
\ w | 任何文字字符,是[a-zA-Z_0-9]的缩写 |
\ W | 任何非单词字符,是[^ \ w]的缩写 |
\ b | 单词边界 |
\ B | 非单词边界 |
在正则表达式中有两种方法可以将元字符用作普通字符。
- 在元字符之前加一个反斜杠(\)。
- 保持元字符在\ Q(以引号开头)和\ E(以引号结尾)之内。
正则表达式量词
量词指定要匹配的字符的出现次数。
正则表达式 | 描述 |
X? | x发生一次或根本不发生 |
X* | X出现零次或多次 |
X + | X发生一次或多次 |
X {n} | X正好发生n次 |
X {n,} | X出现n次或更多次 |
X {n,m} | X发生至少n次但不超过m次 |
量词也可以与字符类和捕获组一起使用。
例如,[abc] +表示a,b或c一次或多次。
(abc)+表示“ abc”组再出现一次。 我们现在将讨论捕获组 。
正则表达式捕获组
捕获组用于将多个字符视为一个单元。 您可以使用()创建一个组。 输入String与捕获组匹配的部分被保存到内存中,可以使用Backreference进行调用。
您可以使用matcher.groupCount方法找出正则表达式模式中的捕获组数。 例如在((a)(bc))中包含3个捕获组; ((a)(bc)),(a)和(bc)。
您可以在正则表达式中使用反引号 (\),然后再调用要调用的组数。
捕获组和反向引用可能会造成混淆,因此让我们通过一个示例来理解它。
System.out.println(Pattern.matches('(\\w\\d)\\1', 'a2a2')); //trueSystem.out.println(Pattern.matches('(\\w\\d)\\1', 'a2b2')); //falseSystem.out.println(Pattern.matches('(AB)(B\\d)\\2\\1', 'ABB2B2AB')); //trueSystem.out.println(Pattern.matches('(AB)(B\\d)\\2\\1', 'ABB2B3AB')); //false
在第一个示例中,在运行时,第一个捕获组是(\ w \ d),当与输入字符串“ a2a2”匹配并保存在内存中时,其计算结果为“ a2”。 因此\ 1指的是“ a2”,因此它返回true。 由于相同的原因,第二条语句打印为false。
尝试自己了解语句3和4的这种情况。
现在,我们将研究一些重要的Pattern和Matcher类方法。
我们可以创建带有标志的Pattern对象。 例如模式。 CASE_INSENSITIVE启用不区分大小写的匹配。
模式类还提供了类似于String类split()方法的split(String) 。
模式类toString()方法返回从中编译此模式的正则表达式String。
Matcher类具有start()和end()索引方法,可精确显示在输入字符串中找到匹配项的位置。
Matcher类还提供String操作方法replaceAll(String替换)和replaceFirst(String替换) 。
现在,我们将通过一个简单的java类看到这些常用功能:
package com.journaldev.util;import java.util.regex.Matcher;
import java.util.regex.Pattern;public class RegexExamples {public static void main(String[] args) {// using pattern with flagsPattern pattern = Pattern.compile('ab', Pattern.CASE_INSENSITIVE);Matcher matcher = pattern.matcher('ABcabdAb');// using Matcher find(), group(), start() and end() methodswhile (matcher.find()) {System.out.println('Found the text \'' + matcher.group()+ '\' starting at ' + matcher.start()+ ' index and ending at index ' + matcher.end());}// using Pattern split() methodpattern = Pattern.compile('\\W');String[] words = pattern.split('one@two#three:four$five');for (String s : words) {System.out.println('Split using Pattern.split(): ' + s);}// using Matcher.replaceFirst() and replaceAll() methodspattern = Pattern.compile('1*2');matcher = pattern.matcher('11234512678');System.out.println('Using replaceAll: ' + matcher.replaceAll('_'));System.out.println('Using replaceFirst: ' + matcher.replaceFirst('_'));}}
上面程序的输出是:
Found the text 'AB' starting at 0 index and ending at index 2
Found the text 'ab' starting at 3 index and ending at index 5
Found the text 'Ab' starting at 6 index and ending at index 8
Split using Pattern.split(): one
Split using Pattern.split(): two
Split using Pattern.split(): three
Split using Pattern.split(): four
Split using Pattern.split(): five
Using replaceAll: _345_678
Using replaceFirst: _34512678
正则表达式是Java面试问题的领域之一,在接下来的几篇文章中,我将提供一些实际示例。
参考: 开发人员食谱博客上的JCG合作伙伴 Pankaj Kumar的Java正则表达式示例教程 。
翻译自: https://www.javacodegeeks.com/2012/11/java-regular-expression-tutorial-with-examples.html
java正则表达式用法示例
java正则表达式用法示例_Java正则表达式教程及示例相关推荐
- java 数字范围正则_Java 正则表达式
正则表达式 概述 正则表达式定义了字符串的模式.正则表达式可以用来搜索.编辑或处理文本.正则表达式并不仅限于某一种语言,但是在每种语言中有细微的差别. java.util.regex 包主要包括以下三 ...
- java qq验证手机号码_java正则表达式表单验证类工具类(验证邮箱、手机号码、qq号码等)...
package util; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * 使用正则表达式进行表单验证 * ...
- java 并发 同步信号_Java并发教程–信号量
java 并发 同步信号 这是我们将要进行的Java并发系列的第一部分. 具体来说,我们将深入研究Java 1.5及更高版本中内置的并发工具. 我们假设您对同步和易失性关键字有基本的了解. 第一篇文章 ...
- java 批量处理 示例_Java异常处理教程(包含示例和最佳实践)
java 批量处理 示例 异常是可能在程序执行期间发生的错误事件,它会破坏其正常流程. Java提供了一种健壮且面向对象的方式来处理异常情况,称为Java异常处理 . 我们将在本教程中研究以下主题. ...
- java regex match 替换_java正则表达式四种常用的处理方式(匹配、分割、替代、获取)...
java 正则表达式高级篇,介绍四种常用的处理方式:匹配.分割.替代.获取,具体内容如下 package test; import java.util.regex.Matcher; import ja ...
- java pattern详解_JAVA正则表达式:Pattern类与Matcher类详解
以下我们就分别来看看这两个类: 一.捕获组的概念 捕获组可以通过从左到右计算其开括号来编号,编号是从1 开始的.例如,在表达式 ((A)(B(C)))中,存在四个这样的组: 1 ((A) ...
- java正则表达式爬图片_Java正则表达式爬取网页,贴出完整代码
import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; import org.ope ...
- java正则表达式所有字符串_java正则表达式如何获取字符串中所有匹配内容
java正则表达式如何获取字符串中所有匹配内容以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! java正则表达式如何获取 ...
- java正则匹配括号_java正则表达式方括号匹配的认识
在java正则表达式的学习中,方括号匹配是一个重点,在这里为了让学员们对方括号匹配这个知识点有更深刻的认识和了解,广州达内的老师将为你进行一次深刻的讲解. 在正则表达式中,[]是对指定的元素进行匹配, ...
最新文章
- mysql为什么直接8.0_为什么要迁移到MySQL8.0?
- 第五章Bookstrap
- android 视频 截图,java – android获取当前视频的截图
- 动物克隆技术应用价值_虽然有了克隆技术为什么要进行克隆呢
- 目前我国负债超过100万的大概有多少人?
- git 忽略 部分文件夹_git设置忽略文件和目录
- 《Linux 系列》- 常用命令- 文件浏览命令]
- How to Create Your Own HDR Environment Maps
- Meta-Learning:MAML
- ASP类计算机专业毕业设计题目
- Linux虚拟机配置防火墙和软件安装限制
- Falsy Bouncer 过滤数组假值 Array.filter()方法
- 一次HTTP链接会产生多少数据流量
- 【java】输入一个数输出它的绝对值
- matlab graythresh()函数使用的注意点
- 【Vue】菜头学前端 - vue3学习笔记
- 面向对象基础任务训练分享
- javascript函数的进阶使用方法(this指向,深浅拷贝等)
- 学历既是敲门砖,又可能成为枷锁
- 计算异步FIFO的最小深度
热门文章
- MySQL find_in_set()函数
- Oracle入门(十五)之数据库锁
- 《四世同堂》金句摘抄(十七)
- java实现打印等腰三角形
- Tomcat9.0 设置局域网内其他电脑或手机端访问{9.0更新}
- android重置系统,安卓手机越用越卡,恢复出厂设置真有用?别瞎搞,看完就明白了!...
- matlab 的excel 对象,MATLAB 中的 COM 对象
- 命令点无效怎么处理_CAD执行修改命令,你试过重复选择对象吗?
- java 8 Lambda 表达式(副作用)
- java异常——异常分类+声明已检查异常+如何抛出异常+自定义异常类