正则表达式学习笔记

这篇具有很好参考价值的文章主要介绍了正则表达式学习笔记。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

正则表达式学习笔记

一、常用正则表达式

1、匹配字母       Pattern pattern=Pattern.compile("[a-zA-Z]+");
2、匹配数字      Pattern pattern=Pattern.compile("[0-9]+");
3、匹配字母和数字 Pattern pattern=Pattern.compile("([0-9]+)|([a-zA-Z]+)");
4、匹配百度排行榜 Pattern pattern=Pattern.compile("<a target=\"_blank\" title=\"(\\S*)\"");
5、匹配IP地址:Pattern pattern=Pattern.compile("\\d+\\.\\d+\\.\\d+\\.\\d+");
6、匹配4位数字:Pattern pattern=Pattern.compile("\\d\\d\\d\\d");
7、匹配

二、需要转义的字符

.*+()$/\?[]^{}
字符 说明
\ 将下一字符标记为特殊字符、文本、反向引用或八进制转义符。
例如:“n"匹配字符串"n”。“\n"匹配换行符。序列”\\“匹配”\“,”\(“匹配”("。
^ 匹配输入字符串开始的位置。
如果设置了RegExp对象的Multiline属性,^还会与"\n"或"\r"之后的位置匹配。
$ 匹配输入字符串结尾的位置。
如果设置了RegExp对象的Multiline属性,$还会与"\n"或"\r"之前的位置匹配。
当此字符紧随任何其他限定符(*、+、?、{n}、{n,}、{n,m})之后时,匹配模式是“非贪心的”。
“非贪心的”模式匹配搜索到的、尽可能短的字符串,而默认的“贪心的”模式匹配搜索到的、尽可能长的字符串。
例如:在字符串“oooo”中,"o+?“只匹配单个"o”,而"o+“匹配所有"o”。

三、元字符

符号 含义 示例 说明 匹配输入
[] 可接收的字符列表 [efgh] e、f、g、h中的任意1个字符
[^] 不可接收的字符列表 [^abc] 除a、b、c之外的任意1个字符,包括数字和特殊符号
- 连字符 A-Z 任意单个大写字母
. 匹配除\n以外的任何字符 a…b 以a开头,b结尾,中间包括2个任意字符的长度为4的字符串 aaab、aefb、a35b、a#*b
\d 匹配单个数字字符,相当于[0-9] \\d{3}(\\d)? 包含3个或4个数字的字符串 123、9876
\D 匹配单个非数字字符串,相当于[^0-9] \\d(\\d)* 以单个非数字字符串开头,后接任意个数字字符串 a、A342
\w 匹配单个数字、大小写字母字符,相当于[0-9a-zA-Z_] \\d{3}\\w{4} 以3个数字字符串开头的长度为7的数字字母字符串 234abcd、12345Pe
\W 匹配单个非数字、大小写字符,相当于[^0-9a-zA-Z_] \\W+\\d{2} 以至少1个非数字字母字符开头,2个数字字符结尾的字符串 #29、#?@10
(?i) 不区分大小写 (?i)abc、a(?i)bc、a((?i)b)c 1、abc都不区分大小写;2、bc不区分大小写;3、仅b不区分大小写
\\s 匹配任何空白字符(空格,制表符等)
\\S 匹配任何非空白字符(空格,制表符等)
竖杠 匹配竖杠之前或之后的表达式

四、限定符

正则表达式学习笔记,正则表达式,学习,笔记

五、Java调用代码

逐个匹配(注意定位符)

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Test {

	public static void main(String[] args) {
		String content=".......";
		Pattern pattern=Pattern.compile("\\d+\\.\\d+\\.\\d+\\.\\d+");
		//Pattern pattern=Pattern.compile(regStr,Pattern.CASE_INSENSITIVE);// 不区分大小写
		Matcher matcher = pattern.matcher(content); // 逐个匹配
		while(matcher.find()) {
			System.out.println("--> "+matcher.group(0));
		}
	}

整体匹配(推荐使用)

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Test {

	public static void main(String[] args) {
		String content=".......";
		String pattern=".*hao.*";
		boolean isMatch=Pattern.matches(pattern,content);// 整体匹配
		System.out.println(isMatch);
	}

常用其他方法

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Test {

	public static void main(String[] args) {
		String content=".......";
		Pattern pattern=Pattern.compile("hao123");
		Matcher matcher = pattern.matcher(content);
       String newStr=matcher.replaceAll("好的");// 匹配后替换(注意:原字符串保持不变)
		
	}

六、分组

1、捕获分组

常用分组构造形式 说明
(pattern) 非命名捕获。 捕获匹配的字符串。
编号为零的第一个捕获是由整个正则表达式模式匹配的文本,
其他捕获结果则根据左括号的顺序从1开始自动编号。
(?<name>pattern) 命名捕获。

举例:

String regStr="(?<g1>\\d\\d)(?<g2>\\d\\d)";

matcher.group(0); // 找到的整体数据
matcher.group(1);// 找到的第一个分组内容
matcher.group(“g1”);// 找到的分组名称为g1的内容;

2、非捕获分组(特别分组)

常用分组构造形式 说明
(?:pattern) 匹配pattern但不捕获该匹配的子表达式,即它是一个非捕获匹配,不存储供以后使用的匹配。
这对于用“or”字符(|)组合模式部件的情况很有用。
例如:'industr(?:y|ies)'是比’industry|industries’更经济的表达式。
(?=pattern) 它是一个非捕获匹配。
例如:'Windows(?=95|98|NT|2000)'匹配’Windows 2000’中的"Windows",但不匹配"Windows 3.1"中的"Windows"。
(?!pattern) 该表达式匹配不处于匹配pattern的字符串的起始点的搜索字符串。
它是一个非捕获匹配。
例如:'Windows(?!95|98|NT|2000)'匹配"Windows 3.1"中的"Windows",但不匹配"Windows 2000"中的"Windows"。

3、反向引用

说明:内部反向引用:\\分组号,外部反向引用 $分组号

  1. 匹配两个连续的相同数字:(\\d)\\1
  2. 匹配五个连续相同的数字:(\\d)\\1{4}
  3. 匹配个位与千位相同,十位与百位相同的数字,比如:5225,1551 正则:(\\d)(\\d)\\2\\1
  4. 匹配商品编号,形式如:12312-333-999-111,格式描述:5位数字开头,然后一个-,然后一个9位数,连续的每3位相同。正则:\\d{5}-(\\d)\\1{2}(\\d)\\2{2}(\\d)\\3{2}

应用:将结巴的字去除掉。

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegTest {

	public static void main(String[] args) {
		String regStr="我我要吃吃吃吃饭饭";
		Pattern compile = Pattern.compile("(.)\\1+");
		Matcher matcher = compile.matcher(regStr);
		String str = matcher.replaceAll("$1");
		System.out.println(str);

      // 简写
      String str=Pattern.compile("(.)\\1+").matcher(regStr).replaceAll("$1");
	}
}

结果:
我要吃饭

4、java String类中使用正则表达式

举例:
1、替换:要求使用正则表达式,将JDK1.3 和 JDK1.4 替换成 JDK

content=content.replaceAll("JDK1\\.3|JDK1\\.4","JDK");

2、验证:手机号,必须是:138 139 开头

String content="13688888888";
if(content.matches("1(38|39)\\d{8}")){
     System.out.println("ok");
}

3、分割:要求按照 # 或 - 或 ~ 或 数字 来分割

String content="hello#abc-jack12smith~北京";
String[] split=content.spllit("#|-|~|\\d+");

七、补充字符(不常用字符)

字符 说明
\b 匹配一个字边界,即字与空格间的位置。
例如:"er\b"匹配“never”中的er,但不匹配“verb”中的“er”。
\B 非边界匹配。
例如: “er\B"匹配"verb"中的"er”,但不匹配"never"中的"er"。
\cx 匹配x指示的控制字符。
例如:\cM 匹配Control-M或回车符。x的值必须在A-Z或a-z之间。如果不是这样,则假定c就是“c”字符本身。
\f 换页符匹配。等效于\x0c 和\cL。
\n 换行符匹配。等效于 \X0a 和\cJ。
\r 匹配一个回车符。等效于 \X0d 和 \cM。
\t 制表符匹配。 与 \x09 和 \cl等效。
\v 垂直制表符匹配。与\x0b 和 \cK等效。
\xn 匹配n,此处的n是一个十六进制转移码。十六进制转移码必须正好是两位数长。
例如:“\x41"匹配"A”。“\x041"与”\x04"&"1"等效。允许在正则表达式中使用ASCII代码。
\num 匹配num,此处的num是一个正整数。到捕获匹配的反向引用。
例如:"(.)\1"匹配两个连续的相同字符。
\n 标识一个八进制转移码或反向引用。
如果\n前面至少有n个捕获子表达式,那么n是反向引用。否则,如果n是八进制(0-7),那么n是八进制转移码。
\nm 标识一个八进制转移码或反向引用。
如果\nm前面至少有nm个捕获子表达式,那么nm是反向引用。
如果\nm前面至少有n个捕获,则n是反向引用,后面跟有字符串m。
如果两种前面的情况都不存在,则\nm匹配八进制nm,其中n和m是八进制数字(0-7)。
\nml 当n是八进制数(0-3),m和l是八进制数(0-7)时,匹配八进制转移码nml。
\un 匹配n,其中n是以四位16进制表示的Unicode字符。例如:\u00A9 匹配版权符号。

八、常用正则表达式

  1. 字符串是否全部是汉子: regStr=“^[\u0391-\uffe5]+$”
  2. 邮政编码(1-9开头的一个6位数字):regStr=“^[1-9]\\d{5}$”
  3. QQ号码(1-9开头的一个(5位数-10位数)):regStr=“^[1-9\\d{4,9}]$”
  4. 手机号码(13,14,15,18 开头的11位数):regStr=“^1[3|4|5|8]\\d{9}$”;
  5. URL:regStr="^((http|https)://)?([\\w-]+\\.)+[\\w-]+(\\/[\\w-?=&/%.#]*)?$";
  6. 电子邮件(只有一个@,@前可以是a-z A-Z 0-9 _-字符,@后面是域名,比如 sohu.com或hao.org.cn)正则:^[\\w_-]+@([a-zA-Z.]+)[a-zA-Z]+$
  7. 数字(包括 +123 -345 34.8 0.9等格式):^[-+]?([1-9]\\d*|0)(\\.\\d+)?$
    == 注意:==[. ? * ] 表示匹配就是. 本身;

九、附录(摘录课件)

正则表达式大全

校验数字的表达式:

1、数字:^[0-9]*$
2、n位的数字:^\d{n}$
3、至少n位的数字:^\d{n,}$
4、m-n位的数字:^\d{m,n}$
5、零和非零开头的数字:^(0|[1-9][0-9]*)$
6、非零开头的最多带两位小数的数字:^([1-9][0-9]*)+(.[0-9{1,2}])?$
7、带1-2位小数的正数或负数:^(\-)?\d+(\.\d{1,2})?$
8、正数、负数、和小数:^(\-|\+)?\d+(\.\d+)?$
9、有两位小数的正实数:^[0-9]+(.[0-9]{2})?$
10、有1~3位小数的正实数:^[0-9]+(.[0-9]{1,3})?$

校验字符的表达式:
正则表达式学习笔记,正则表达式,学习,笔记
特殊要求:
正则表达式学习笔记,正则表达式,学习,笔记
正则表达式学习笔记,正则表达式,学习,笔记

十、完结

文章来源地址https://www.toymoban.com/news/detail-674508.html

到了这里,关于正则表达式学习笔记的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 老夫的正则表达式大成了,桀桀桀桀!!!【Python 正则表达式笔记】

    特殊字符 .^$?+*{}[]()| 为特殊字符,若想要使用字面值,必须使用 进行转义 字符类 [] [] 匹配包含在方括号中的任何字符。它也可以指定范围,例: [a-zA-Z0-9] 表示a到z,A到Z,0到9之间的任何一个字符 [u4e00-u9fa5] 匹配 Unicode 中文 [^x00-xff] 匹配双字节字符(包括中文) 在 [] 中

    2024年02月04日
    浏览(58)
  • Python正则表达式之学习正则表达式三步曲

            正则表达式描述了一种字符串匹配的模式,可以用来检查一个串的有无某子串,或者做子串匹配替换,取出子串等操作。也可以说正则表达式就是字符串的匹配规则,也可以理解为是一种模糊匹配,匹配满足正则条件的字符串。         1、数据验证(eg:表单验

    2024年02月15日
    浏览(59)
  • 正则表达式笔记

    /你的正则表达式写在这里/ 1?        1出现0次或1次 1*        1出现0次或多次 1+        1出现1次或多次 1{2}        1出现了2次 1{2,3}        1出现了2到3次 1{2,}        1出现了2次及以上 (5555){1}        5555出现了1次 (dog|cat)        dog或者cat [a-zA-Z]   

    2024年02月10日
    浏览(46)
  • python正则表达式笔记1

    最近工作中经常用到正则表达式处理数据,慢慢发现了正则表达式的强大功能,尤其在数据处理工作中,记录下来分享给大家。 一、 正则表达式语法介绍 正则表达式(或 RE)指定了一组与之匹配的字符串;模块内的函数可以检查某个字符串是否与给定的正则表达式匹配(或

    2024年02月09日
    浏览(43)
  • python正则表达式笔记2

    由 \\\'\\\' 和一个字符组成的特殊序列在以下列出。 如果普通字符不是ASCII数位或者ASCII字母,那么正则样式将匹配第二个字符。比如,$ 匹配字符 \\\'$\\\'. number 匹配数字代表的组合。每个括号是一个组合,组合从1开始编号。 比如 (.+) 1 匹配 \\\'the the\\\' 或者 \\\'55 55\\\', 但不会匹配 \\\'thethe\\\'

    2024年02月09日
    浏览(47)
  • 机器学习与数据科学-专题1 Python正则表达式-【正则表达式入门-1】

    为了完成本关任务,你需要掌握: 在 Python 中使用正则表达式; 最基础正则表达式; 正则匹配函数。 在 Python 中使用正则表达式 正可谓人生苦短,我用 Python。Python 有个特点就是库非常多,自然拥有正则匹配这种常见的库,并且此库已经嵌入在 Python 标准库中,使用起来非常

    2024年01月22日
    浏览(58)
  • QT笔记 - QRegularExpression正则表达式

    QRegularExpression是Qt框架中的正则表达式类,它支持Perl兼容的正则表达式语法。 以下是一些常用的正则表达式语法规则: 1. 字符匹配:     * 纯字符串:直接写入要匹配的字符串。例如,\\\"hello\\\"匹配字符串\\\"hello\\\"。     * 转义字符:使用反斜杠()来转义特殊字符。例如,\\\"n\\\"匹配

    2024年01月23日
    浏览(44)
  • 正则表达式学习

    生成正则图 正则表达式简单、强大,它可以极大地提高我们工作中的文本处理效率。 现在,各大操作系统、编程语言、文本编辑器都已经支持正则表达式 正则其实就是一种描述文本内容组成规律的表示方式。正则表达式真正重要的是字符组、多选结构、量词等等这些概念

    2024年02月09日
    浏览(43)
  • 学习正则表达式

    正则表达式是一个强大的文本匹配工具。但是,对于初学者来说,众多的符号和规则可能让人难以理解。其实,你不需要记住所有的正则表达式语法!本文将分享一些简单而实用的技巧,帮助理解正则表达式的核心概念,轻松使用正则表达式! 正则表达式(Regular Expression,在

    2024年02月08日
    浏览(45)
  • 如何学习正则表达式

    正则是什么,能做什么? 正则,就是正则表达式,英文是 Regular Expression,简称 RE。顾名思义,正则其实就是一种描述文本内容组成规律的表示方式。 在编程语言中,正则常常用来简化文本处理的逻辑。在 Linux 命令中,它也可以帮助我们轻松地查找或编辑文件的内容,甚至实

    2024年02月11日
    浏览(53)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包