1 前言

正则表达式主要用于复杂文本处理,如模式匹配、格式检验、文本替换等。常用的通配符有:

^, $, *, ., , -, +, ?, &, |, (), [], {}

2 String中的split()、matches()、replace()、replaceFirst()、replaceAll()方法

1. split() 方法

public String[] split(String regex) //字符串替换(支持正则表达式)

2. matches()方法

public boolean matches(String regex) //匹配模式串(支持正则表达式)

3. replace()方法

public String replace(char oldChar, char newChar) //替换所有匹配的字符
public String replace(CharSequence target, CharSequence replacement) //替换所有匹配的字符串

不支持正则表达式匹配 ,替换后不改变原串的值,返回一个新的串

4. replaceFirst()方法

public String replaceFirst(String regex, String replacement) //替换第一次匹配的字符串(支持正则表达式)

5. replaceAll()方法

public String replaceAll(String regex, String replacement) //替换所有匹配的字符串(支持正则表达式)

6. replace()方法与replaceAll()方法比较

String s1="12***ab*";
String s2=s1.replace("*","_");
String s3=s1.replaceAll("\\*", "_");
s1: 12***ab*
S2: 12___ab_
s3: 12___ab_

2 正则表达式基本类型

2.1 标准字符集

  • \d:任意一个数字(0-9)
  • \w:任意一个字母(A-Z,a-z)、数字(0-9)、下划线(_)
  • \s:空格、制表符(\t)、换行符(\n)中任意一个
  • .:任意字符(除 "\n"),如果要匹配包含 "\n" 在内的所有字符,一般使用 [\s\S]

注意区分大小写,大写表示取反,如:\D表示任意非数字字符

2.2 自定义字符集

[ab5@]:匹配 "a" 或 "b" 或 "5" 或 "@"
[^abc]:匹配 "a"、"b"、"c" 之外的任意字符
[f-k]:匹配 f - k 之间的任意字母
[^a-f0-3]:匹配 a - f, 0 - 3 之外的任意字符
[\d.\-+]:匹配 "0" - "9"、"."、"-"、"+"

注意:

  • 除 "^"、"-"、"" 外的特殊符号,如果被包含在 "[ ]" 中,将失去其特殊意义,当做普通字符处理;
  • 除 "." 以外的标准字符集,如果被包含在 "[ ]" 中,自定义字符集将包含该标准字符集。

2.3 量词

  • {n}:表达式重复 n 次
  • {m,n}:表达式至少重复 m 次,至多重复 n 次
  • {m,}:表达式至少重复 m 次
  • ?:表达式重复0次或1次,相当于
  • +:表达式至少出现一次,相当于
  • *:表达式不出现或出现任意次,相当于
\d{3}:匹配3位整数,相当于"\d\d\d"
\d\d{3}:匹配4位整数
(\d\d){3}:匹配6位整数
a\d?b:匹配 "ab", "a0b", "a5b", "a7b"等

2.4 字符边界

  • ^:与字符串开始的地方匹配
  • $:与字符串结束的地方匹配
  • \b:匹配一个单词边界(匹配一个位置:前面的字符和后面的字符不全是\w)

2.5 选择与分组

  • |:a|b,匹配 a 或 b
  • ():用于将多个字符作为一个整体

2.6 预搜索(零宽断言)

  • (?=exp):断言自身出现的位置后面能匹配表达式 exp
  • (?<=exp):断言自身出现的位置前面能匹配表达式 exp
  • (?!exp):断言自身出现的位置后面不能匹配表达式 exp
  • (?<!exp):断言自身出现的位置前面不能匹配表达式 exp

注意:只进行表达式的匹配,匹配内容不计入最终的匹配结果,是零宽度。

待测串:having eating going singsing
模式串:[a-z]+(?=ing)
匹配串:hav eat go s

3 简单案例

问题描述:给一个字符串 s ,删除字母、数字、减号之外的字符,删除连续两个及以上的减号,删除孤立的减号,使得每个单词仍保持原来的意义。如 " -i- -- am- @__#$ 19-years - -old_ _ _ " ,经处理后,得到 "i am 19-years old".

import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
String s=sc.nextLine();
s=s.replaceAll("[^a-zA-Z0-9\\-]"," "); //替换所有非字母、数字、减号字符为空格
s=s.replaceAll("\\-{2,}", " "); //替换连续2个及以上的减号为空格
s=s.replace("- ", " "); //替换"- "为空格
s=s.replace(" -", " "); //替换" -"为空格
s=s.replaceAll("\\s+"," "); //替换连续1个及以上的空字符(空格、\t、\n)为空格
s=s.trim(); //删除首尾多余的空格
if(s.charAt(0)=='-') {
s=s.replaceFirst("-",""); //删除字符串头的"-"
}
System.out.println(s);
}
}
   -i-  -- am- @ 	 __#$ 19-years - -old_
i am 19-years old

​ 声明:本文转自正则表达式(Regular Expression)详解

正则表达式(Regular Expression)详解的更多相关文章

  1. Jmeter 正则表达式提取器详解(Regular Expression Exactor)

    Jmeter 正则表达式提取器详解(Regular Expression Exactor) Name(名称):随意设置,最好有业务意义. Comments(注释):随意设置,可以为空 Apply to ...

  2. hibernate Expression详解

    关键字: hibernate expression hibernate Expression详解Expression.gt:对应SQL条件中的"field > value " ...

  3. JMeter 后置处理器之正则表达式提取器详解

    后置处理器之正则表达式提取器详解   by:授客 QQ:1033553122 1. 添加正则表达式提取器 右键线程组->添加->后置处理器->正则表达式提取器 2. 提取器配置介绍 ...

  4. Java基础-正则表达式(Regular Expression)语法规则简介

    Java基础-正则表达式(Regular Expression)语法规则简介 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.正则表达式的概念 正则表达式(Regular Exp ...

  5. 正则表达式-Regular expression学习笔记

    正则表达式 正则表达式(Regular expression)是一种符号表示法,被用来识别文本模式. 最近在学习正则表达式,今天整理一下其中的一些知识点 grep - 打印匹配行 grep 是个很强大 ...

  6. 正则表达式(Regular Expression, RegEx)学习入门

    1. 概述 正则表达式(Regular Expression, RegEx)是一种匹配模式,描述的是一串文本的特征. 正如自然语言中高大.坚固等词语抽象出来描述事物特征一样,正则表达式就是字符的高度抽 ...

  7. Python正则表达式Regular Expression基本用法

    资料来源:http://blog.csdn.net/whycadi/article/details/2011046   直接从网上资料转载过来,作为自己的参考.这个写的很清楚.先拿来看看. 1.正则表 ...

  8. C#中【正则表达式regular expression】相关的知识

    Regex System.Text.RegularExpressions.Regex      regex应该是regular expression的缩写 https://msdn.microsoft ...

  9. java 正则表达式 -Regular Expression

    正则表达式(Regular Expression),可以说就是一个字符构成的串,它定义了一个用来搜索匹配字符串的模式.正则表达式定义了字符串的模式,可以用来搜索.编辑或处理文本,不仅限于某一种语言(P ...

  10. Python -- 正则表达式 regular expression

    正则表达式(regular expression) 根据其英文翻译,re模块 作用:用来匹配字符串.  在Python中,正则表达式是特殊的字符序列,检查一个字符串是否与某种模式匹配. 设计思想:用一 ...

随机推荐

  1. [转帖]9.1 TiDB HTAP 的特点

    HTAP 是 Hybrid Transactional / Analytical Processing 的缩写.这个词汇在 2014 年由 Gartner 提出.传统意义上,数据库往往专为交易或者分析 ...

  2. 三十分钟入门基础Go(Java小子版)

    作者:京东科技 韩国凯 前言 Go语言定义 Go(又称 Golang)是 Google 的 Robert Griesemer,Rob Pike 及 Ken Thompson 开发的一种静态.强类型.编 ...

  3. elemetui-中在input框中回车

    在input框中回车 <el-input @keyup.enter.native="gotoLogin" class="my-el-input" plac ...

  4. js计算两个时间相差多少分钟

    <script> var str = "2020-02-04" console.log(str) console.log(str.replace(/-/g, " ...

  5. ABP-VNext 用户权限管理系统实战----问题与解决方案

    1.swagger请求总是报:400 Bad Request,但是postman请求是没有问题 查看日志报表: 解决方案: 在 ConfigureServices 中增加如下的内容 Configure ...

  6. dump分析器winbdg

    工具: winbdg WinDBG不是专门用于调试.Net程序的工具,它更偏向于底层,可用于内核和驱动调试.进行普通的.Net程序调试还是使用微软专为.Net开发的调试工具MDBG更方便一些.但是Wi ...

  7. 强化学习技巧四:模型训练速度过慢、GPU利用率较低,CPU利用率很低问题总结与分析。

    1.PyTorchGPU利用率较低问题原因: 在服务器端或者本地pc端, 输入nvidia-smi 来观察显卡的GPU内存占用率(Memory-Usage),显卡的GPU利用率(GPU-util),然 ...

  8. 解决问题:latex中bib引用顺序不正确,引用顺序和正文不一致

    问题:生成pdf时文献应用会乱序 引用bib格式的参考文献时,会这么写: \bibliographystyle{plain} \bibliography{%filename%.bib} 而plain的 ...

  9. JWT( JSON Web Token —— JSON Web 令牌 )的学习笔记

    一.跨域认证的问题 互联网服务离不开用户认证.一般流程是下面这样: 1.用户向服务器发送用户名和密码. 2.服务器验证通过后,在当前对话(session)里面保存相关数据,比如用户角色.登录时间等等. ...

  10. 小团队如何妙用 JuiceFS

    早些年还在 ENJOY 的时候, 就已经在用 JuiceFS, 并且一路伴随着我工作过的四家小公司, 这玩意对我来说, 已经成了理所应当不可或缺的基础设施, 对于我服务过的小团队而言, 更是实实在在的 ...