首页 > 编程语言 >正则表达式&&Java应用

正则表达式&&Java应用

时间:2023-02-07 22:00:11浏览次数:49  
标签:regex 字符 abc 匹配 String 正则表达式 && Java

正则表达式

​10分钟快速掌握正则表达式​

​Regex测试网站​

​正则表达式30分钟入门教程​

正则表达式&&Java应用_元字符

正则表达式&&Java应用_正则表达式_02

正则表达式可以用一些规定的字符来制定规则,并用来校验数据格式的合法性。

限定符

限定符

描述

?

表示其前面的一个字符:出现一次或不出现,如​​used?​​​可以匹配​​use​​​ 或 ​​used​

*

表示其前面的一个字符:出现多次或不出现,如​​ab*c​​​可以匹配​​ac​​​、​​abc​​​、​​abbc​​……

+

表示其前面的一个字符:出现一次及以上,如​​ab+c​​​可以匹配​​abc​​​、​​abbc​​​、​​abbbc​​……

{n}

表示其前面的一个字符:正好出现n次,如​​ab{3}c​​​可以匹配​​abbbc​

{n,}

表示其前面的一个字符:至少出现n次,如​​ab{3,}c​​​可以匹配​​abbbc​​​、​​abbbbc​​……

{n,m}

表示其前面的一个字符:出现的次数范围为[n,m],如​​ab{1,3}​​​可以匹配​​abc​​​、​​abbc​​​、​​abbbc​

当我们需要匹配的字符不止一个时,我们可以使用​​()​​将需要执行匹配的字符括起来

选择

用圆括号 () 将所有选择项括起来,相邻的选择项之间用 | 分隔。

a (cat|dog) 可以匹配 a cata dog

字符类

当需要匹配由a、b、c组成的单词,可以使用​​[abc]+​​。(​​[]​​要求匹配的字符只能取自其里面的内容)

​[]​​中还可以指定范围,如​​[a-z]​​表所有小写的英文字符

​[^abc]​​代表除括号内容外的字符

​[a-z&&^bc]​​ a-z 除了b、c

元字符

正则表达式为我们定义好了一些常用的字符类,它们被称为元字符。

其包含数字、空白符、单词开头、结尾等,大多以​​\​​开头。

元字符

描述

.

任意字符(不包含换行符)

\d

数字 [0-9]

\D

非数字 [^0-9]

\s

空白字符 (包括Tab和换行符)

\S

非空白字符

\w

英文、数字、下划线,等价于 [A-Za-z0-9_]

\W

非单词字符

\b

匹配单词的边界,如​​er\b​​​可以匹配​​never​​​但无法匹配​​verb​​​的​​er​​​;​​\bve​​​可以匹配​​verb​​​但无法匹配​​never​​​的​​ve​​。

^

匹配行首,比如​​^a​​​ 只会匹配行首的​​a​

$

匹配行尾,比如​​a$ ​​​ 只会匹配行尾的​​a​

Java把带​​\​​的字符当成转义字符,我们在使用预定义的字符类时(如​​\d​​)需要多加一个​​\​​,即​​\\d​​,而​​.​​任意字符则为​​\.​​。

贪婪/懒惰匹配

​*​​ 和 ​​+​​ 限定符都是贪婪的,因为它们会尽可能多的匹配文字,只有在它们的后面加上一个 ​​?​​ 就可以实现非贪婪或最小匹配。

  • 贪婪匹配 :匹配结果尽可能多(​​*​​、​​+​​、​​{}​​在匹配字符串时,默认会匹配尽可能多的字符)
  • 懒惰匹配 :匹配结果尽可能少

举例:

<span><b>This is a sample text</b></span>

如果使用​​<.+>​​对上面的HTML标签进行匹配,我们会获取整个句子​​<span><b>This is a sample text</b></span>​​,而不是标签

我们可以使用​​<.+?>​​,将匹配的模式从贪婪匹配切换为懒惰匹配,此时则可以匹配到下面的4个标签 ​​<span>​​ ​​<b>​​ ​​</b>​​ ​​</span>​

除上述规则外,正则表达式还有 捕获、断言、递归、平衡组 等内容


Java的Regex类

字符串对象提供了匹配正则表达式的方法

方法

描述

matches(String regex)

判断是否匹配正则表达式,匹配返回true,不匹配返回false

split(String regex)

按照正则表达式匹配的内容进行分割字符串,返回一个字符串数组

replaceAll(String regex,replacement)

按照正则表达式匹配的内容进行替换

public class Test {
public static void main(String[] args) {
String names = "小路fdjkfjsfkadf蓉儿djjsfsjfskfdf过儿";

//1、split(regex)
String[] arrs = names.split("\\w+");
for (int i = 0; i < arrs.length; i++) {
System.out.print(arrs[i]+" ");//小路 蓉儿 过儿
}

//2、replaceAll(regex,replacement)
String names2 = names.replaceAll("\\w+", " ");
System.out.println(names2);//小路 蓉儿 过儿
}
}

Regex支持爬取信息,使用Pattern、Matcher类

标签:regex,字符,abc,匹配,String,正则表达式,&&,Java
From: https://blog.51cto.com/u_15936519/6042715

相关文章

  • javaWeb02-Servlet
    本文参考了这篇博客:Servlet、Servlet容器等内容讲解-江清澜静-博客园(cnblogs.com) ......
  • JavaScript的知识点整理
    最近写了一个员工管理作业,暴露了一些问题就是。JS的查找标签的时候,要确定返回的是DOM对象还是数组,document对象可以是任意dom对象,将查询范围限制在当前dom对象,1、直接查......
  • java-Stream流的常用方法
    一 常见创建流的三种方式//list集合创建流方式newArrayList<>().stream();newHashSet<>().stream();//map集合创建流方式,原......
  • java 二维数组
      一个[代表是一维数组,I代表是int型,@后面跟的是地址; ......
  • [转]java dd-m 月 - yy 日期转换成 yyyy-MM-dd
    原文地址:javadd-m月-yy日期转换成yyyy-MM-dd-qlc的个人空间-OSCHINA-中文开源技术交流社区SimpleDateFormatsf=newSimpleDateFormat("dd-MM月-yy",Local......
  • javaWeb01-使用idea快速搭建web项目
    本文主要讲述如何使用idea【这里的idea是2021年的】快速搭建web项目【没有使用maven创库】第一步:new->project第二步:选择java空项目第三步:选择路径以及......
  • Apache pdfbox java.io.IOException: The TrueType font null does not contain a 'cm
    尝试使用Apachepdfbox添加中文到pdf中,发现出现TheTrueTypefontnulldoesnotcontaina'cmap'table,主要原因是遍历pdf页数时调用PDDocument#save导致清空fontsToSu......
  • java中Map判断是否为空之isEmpty()与==null的区别
    isEmpty()方法判断Map是否有内容(即new分配空间后是否put键值对),若没有内容则true,否则false==null是判断map是否为null(即是否new分配空间,和其中的键值对没关系),若没有内容......
  • Redis在java中的使用
    1.添加价包<!--Redis依赖--><dependency><groupId>org.springframework.data</groupId><artifactId>spring-data-redis</artifactId><version>......
  • java控制结构1之if else和嵌套分支
    1.程序流程控制介绍在程序中,程序运行的流程控制决定程序是如何执行的,是我们必须掌握的,主要有三大流程控制语句。1)顺序控制2)分支控制3)循环控制2.顺序结构2.1不做......