欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

正则表达式笔记

程序员文章站 2022-06-26 11:33:49
...

正则表达式笔记
正则表达式笔记

一、正则

正则表达式是用来描述具有一定特征的字符串的特殊字符串。 Regular Expression。
正则表达式本身也是一个字符串,类似于“元数据”的概念,相当于查找结构信息。 正则表达式,又称规则表达式。
正则表达式笔记

1.入门

1)、 匹配 match
所谓的匹配,匹配子串即可。
2)、作用
验证、查找、替换、分割

2、字符集

默认情况下区分大小写。
1)、 普通字符
非特殊含义以外的字符,如 a b 中国 尚学堂
2)、 元字符与转义
14 个元字符: { } \ ^ $ . * + ? |→ 特殊含义
转义字符: +字母 \d [0-9] \ \ \s空白符 \w –>字母数字_ (没有中文)
3)、 字符类
a)、自定义
由[]组,只匹配一个, 需要注意以下四个:
^: 如果在第一个位置,表示取反的含义。
-表示一个区间即范围
] 最后一个位置为:结束
\ 转义
.在字符类中 不是代表任意的字符,代码 自身 .的含义。
如果需要表示原有的含义,挪到位置 或者\ 。

b)、默认|标准字符类
正则表达式笔记

3. 量词

匹配的过程中,需要指定次数。

  • 0 个及以上
  • 1 个及以上
    ? –>0 或 1 个
    {n}n 次 ,非负数
    {n,}大于等于 n 次
    {n,m} –>大于等于 n 小于等于 m 次

4. 贪婪模式

在匹配次数不定时如* {n,} +,匹配字符越多越好,默认模式即”贪婪模
贪婪模式 greedy(匹配字符越多越好,可回溯) “回溯”指,可以从最后往前面找
?懒惰模式 lazy reluctant (匹配字符越少越好,可回溯)
+独占模式 possessive(匹配字符越多越好,不可回溯) 用的较少

.*o –>贪婪模式
.{2,}o–>贪婪模式
.{2,}?o –>懒惰模式
.{2,}+o –>独占模式,不可回溯 没有匹配到内容。

5.边界

1)、 边界不占用宽度,只是一个界限。
2)、 ^ :开始 \b:单词边界 \B:非单词边界 $:结束
^:多行代表每行头 单行代表整个字符串的开始
$: 多行代表每行尾 单行代表字符串的结尾
\b 匹配前面或后面的不是\w
\B 匹配前面或后面的是\w

6. 选择符与分组

1)、选择符
| → 优先级低 ,满足匹配则停止,不会查找更优的方案
hellohe
he|hello –>只匹配 he,不匹配 hello
hello|ehe 匹配 he 与 hello
2)、分组
() 组,提高优先级,内部存在缓存,可以使用缓存即反向引用。
必须认识组编号,为( 的位置
(")test\1 –> “第 1 个左括号中
((")test)\2 –> “第 2 个左括号中
非捕获组:(?:xxx) : 不缓存组
3)、 模式修改符
(?ism )*****(?-ism)
i: insensitive 使正则表达式对大小写不敏感; (重点)

s: singleline 开启“单行模式”,即点号“ .”匹配新行符;
m: multiline 开启“多行模式”,即“ ^”和“ $”匹配新行符的前面和后面的位置。

Select
select
select
SELECT * from

(?i)select(?-i) 不区分大小写。

7. 零宽断言(难点)

前瞻( Lookahead) 后顾( Lookbehind)
正则表达式笔记

二.常用类

1.正则

java.util.regex Pattern Matcher String
查找、替换、分割、组的使用
1)、 Pattern
正则表达式笔记
2)Matcher(匹配器)
正则表达式笔记
3)、字符串与正则
正则表达式笔记

三.附件

Eclipse和JS的2种使用正则方法:

Eclipse使用正则:
//第一种使用方法matches(正则)    公式:str.matches(reg) 
		String reg="\\d";
		String str="lksdafks2dkjf2lkds4sjdflksd6lkdj";
		System.out.println(str.matches(reg));
		//replace 识别正则表达式的时候默认替换第一个满足正则的内容,如果想要替换多个,使用replaceAll
		System.out.println(str.replaceAll("\\d", "S")); 把所有数字替换成S
		//切割字符串
		System.out.println(Arrays.toString(str.split("\\d")));
		
//第二种使用方法Pattern 表示正则语法的类
		Pattern regex=Pattern.compile(reg);
		//获取匹配器对象  公式: regex.matcher(str)
		Matcher macher=regex.matcher(str);
		//查找是否有满足条件的内容,继续向下查找
		System.out.println(macher.find());
		System.out.println(macher.find());






js中使用正则:
<!--
        js中使用正则:
            match  匹配
                可以是第一个满足的内容--数组
                可以是所有满足的内容--数组  --g 代表全局变量
                如果没有满足条件的返回null
            test 判断是否满足 true,false
--> 

<script>
        var str="ab1cadac";
        var str2='A3441';
        //全局匹配,获取多个能满足正则语法的数组形式的内容

        //隐式定义正则形式  使用/xxxx/
        var reg1=/^[A-Z]\d{5}$/;
        //显示定义正则    使用new RegExp(‘’)
        var reg2=new RegExp('\\d');
        
        var arr=str2.match(reg1);//第一种方法使用match,  公式: str2.match(reg1)
        console.log(arr);

        console.log(reg1.test(str2)); //第二种方法使用test,  公式: reg1.test(str2)
    </script>