首页 > 其他分享 >正则表达式

正则表达式

时间:2023-09-21 21:22:47浏览次数:39  
标签:字符 匹配 正则表达式 正则 贪婪 李杰 李二

正则表达式内容介绍

1、字符组

字符组是用于查找指定的字符,从左往右依次查找。通常来说,字符组中所有查找对象都是或的关系。

符号 说明
[0123456789] 匹配0到9任意一个数(全写)
[0-9] 匹配0到9任意一个数(缩写)
[a-z] 匹配26个小写英文字母
[A-Z] 匹配26个大写英文字母
[0-9a-zA-Z] 匹配数字或者小写字母或者大写字母

2、特殊符号

特殊符号默认匹配方式是挨个挨个匹配

符号 说明
. 匹配除换行符以外的任意字符
\w 匹配数字、字母、下划线
\W 匹配非数字、非字母、非下划线
\d 匹配数字
^ 匹配字符串的开头
$ 匹配字符串的结尾

^和$符号,两者组合使用可以非常精确的限制匹配的内容。

符号 名称
a|b 匹配a或者b(管道符的意思是或)
() 给正则表达式分组 不影响表达式的匹配功能
[] 字符组 内部填写的内容默认都是或的关系
[^] 取反操作 匹配除了字符组里面的其他所有字符

ps:注意上尖号在中括号内和中括号意思完全不同

3、量词

符号 说明
* 匹配零次或多次 默认是多次(无穷次)
+ 匹配一次或多次 默认是多次(无穷次)
? 匹配零次或一次 作为量词意义不大主要用于非贪婪匹配
重复n次
重复n次或更多次 默认是多次(无穷次)
重复n到m次 默认是m次
ps:量词必须结合表达式一起使用 不能单独出现 并且只影响左边第一个表达式
    jason\d{3} 只影响\d
这里的正则表达式的意思是查找到jason字符并且在后面需要有三个数字

注:正则表达式默认情况下都是贪婪匹配>>>:尽可能多的匹配

4、贪婪匹配与非贪婪匹配

贪婪匹配

上面我们提到了所有的量词都是贪婪匹配,会尽可能多的获取可以匹配的内容。

非贪婪匹配

默认情况下量词使用的是贪婪匹配,但是我们在量词后面加上问号就可以把他由贪婪匹配变成非贪婪匹配。这个时候就会变成尽可能少的获取匹配的内容

待匹配的文本
	<script>alert(123)</script>
待使用的正则(贪婪匹配)
	<.*>
结果如下:
	<script>alert(123)</script> 
待使用的正则(非贪婪匹配)
	<.*?>
结果如下:
	<script>
	</script>

5、转义符

当我们在正则表达式中使用\n这类内容的时候需要注意,这个时候我们是在查找换行符,当我们想要查找内容中的\n就需要在查找的表达式中使用\n来查找,如果是有两个撬棍的就需要使用四个撬棍来查找,以此类推。同时,如果我们是在python中使用的话,可以在字符串前面加上r来取消符号的特殊意义。

\n     	   匹配的是换行符
\\n			匹配的是文本\n
\\\\n		匹配的是文本\\n

6、正则表达式实战建议与一些例子

建议

虽然这个正则表达式很使用,但是这并不意味着我们需要很全面的了解他,相反我们只是需要了解就可以,做到看到表达式能知道意思就足够了。

1.编写校验用户身份证号的正则
	 ^[1-9]\d{13,16}[0-9x]$
    ^[1-9]\d{14}(\d{2}[0-9x])?$
    ^([1-9]\d{16}[0-9x]|[1-9]\d{14})$
2.编写校验邮箱的正则
3.编写校验用户手机号的正则(座机、移动)
4.编写校验用户qq号的正则

这些功能的正则表达式都已经在网上出现很多年了,虽然我们自己写的也能用,但我们会出现别人写的更好用的情况,因此我们也要学会前人栽树后人乘凉。

例子

1、. ^ $

正则 待匹配字符 匹配结果 说明
海. 海燕海娇海东 海燕海娇海东 匹配所有"海."的字符
^海. 海燕海娇海东 海燕 只从开头匹配"海."
海.$ 海燕海娇海东 海东 只匹配结尾的"海.$"

2、* + ? { }

正则 待匹配字符 匹配结果 说明
李.? 李杰和李莲英和李二棍子 李杰 李莲 李二 ?表示重复零次或一次,即只匹配"李"后面一个任意字符
李.* 李杰和李莲英和李二棍子 李杰和李莲英和李二棍子 *表示重复零次或多次,即匹配"李"后面0或多个任意字符
李.+ 李杰和李莲英和李二棍子 李杰和李莲英和李二棍子 +表示重复一次或多次,即只匹配"李"后面1个或多个任意字符
李. 李杰和李莲英和李二棍子 李杰和 李莲英 李二棍 {1,2}匹配1到2次任意字符

注意:前面的*,+,?等都是贪婪匹配,也就是尽可能匹配,后面加?号使其变成惰性匹配

正则 待匹配字符 匹配结果 说明
李.*? 李杰和李莲英和李二棍子 李 李 李 惰性匹配

3、字符集[][^]

正则 待匹配字符 匹配结果 说明
李[杰莲英二棍子]* 李杰和李莲英和李二棍子 李杰 李莲英 李二棍子 表示匹配"李"字后面[杰莲英二棍子]的字符任意次
李[^和]* 李杰和李莲英和李二棍子 李杰 李莲英 李二棍子 表示匹配一个不是"和"的字符任意次
[\d] 456bdha3 4 5 6 3 表示匹配任意一个数字,匹配到4个结果
[\d]+ 456bdha3 456 3 表示匹配任意个数字,匹配到2个结果

4、分组 ()与 或 |[^]

正则 待匹配字符 匹配结果 说明
[1]\d{13,16}[0-9x]$ 110101198001017032 110101198001017032 表示可以匹配一个正确的身份证号
[2]\d{13,16}[0-9x]$ 1101011980010170 1101011980010170 表示也可以匹配这串数字,但这并不是一个正确的身份证号码,它是一个16位的数字
[3]\d{14}(\d{2}[0-9x])?$ 1101011980010170 False 现在不会匹配错误的身份证号了()表示分组,将\d{2}[0-9x]分成一组,就可以整体约束他们出现的次数为0-1次
^([1-9]\d{16}[0-9x]|[1-9]\d{14})$ 110105199812067023 110105199812067023 表示先匹配[1-9]\d{16}[0-9x]如果没有匹配上就匹配[1-9]\d{14}

5、转义符

正则 待匹配字符 匹配结果 说明
\n \n False 因为在正则表达式中\是有特殊意义的字符,所以要匹配\n本身,用表达式\n无法匹配
\n \n True 转义\之后变成\\,即可匹配
"\n" '\n' True 如果在python中,字符串中的'\'也需要转义,所以每一个字符串'\'又需要转义一次
r'\n' r'\n' True 在字符串之前加r,让整个字符串不转义

6、贪婪匹配

几个常用的非贪婪匹配Pattern:*? 重复任意次,但尽可能少重复
+? 重复1次或更多次,但尽可能少重复
?? 重复0次或1次,但尽可能少重复
{n,m}? 重复n到m次,但尽可能少重复
{n,}? 重复n次以上,但尽可能少重复


标签:字符,匹配,正则表达式,正则,贪婪,李杰,李二
From: https://www.cnblogs.com/wolongnp/p/17720984.html

相关文章

  • 正则表达式知识点总结
    第一部分:正则表达式概念一个函数:re.findall(pattern,string)一些元字符:. * ? + [] () \ ^ $通过()来改变findall的行为 例1: 判断一个手机号码(长度、开头数字为1、只能是数字)importrea=12345678901defcheck_phone(phone):str_ph=str(pho......
  • Oracle正则表达式函数
    1、正则表达式中的元字符元字符意思例子\说明要匹配的字符是一个特殊字符、常量或者后者引用。(后引用重复上一次的匹配)\n匹配换行符\\匹配\\(匹配(\)匹配)^匹配字符串的开头位置如果A是字符串的第一个字符,^A匹配A$匹配字符串的末尾位置如果B是字符......
  • linux中正则表达式仅保留绝对路径的目录
     001、方法1[root@pc1test2]#lsa.txt[root@pc1test2]#cata.txt##测试文件/home/test2/a.txt[root@pc1test2]#sed-r's/(\/.*\/).*/\1/'a.txt##仅保留路径/home/test2/ ......
  • 关于正则表达式 g,m 参数的总结,为了回答“正则表达式(/[^0-9]/g,'')中的"/g"是什么意
    为了解答“正则表达式(/[^0-9]/g,'')中的"/g"是什么意思?”这个问题,也为了能够便于大家对正则表达式有一个更为综合和深刻的认识,我将一些关键点和容易犯糊涂的地方再系统总结一下。 总结1:附件参数g的用法 表达式加上参数g之后,表明可以进行全局匹配,注意这里“可以”的含义。我们详......
  • 前端一些常用的正则表达式
    一、校验数字的表达式1数字:^[0-9]$2n位的数字:^\d{n}$3至少n位的数字:^\d{n,}$4m-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,......
  • 正则表达式(简单了解)
    正则表达式字符元字符 匹配内容. 匹配除换行符以外的任意字符#掌握\w 匹配字母或数字或下划线 #掌握\s 匹配任意的空白符\d 匹配数字 #掌握\n 匹配一个换行符 #掌握\t 匹配一个制表符\b 匹配一个单词的结尾^ 匹配字符串的开始 #掌握$ 匹配字符......
  • vue3中验证手机号的正则表达式
    在Vue3中,你可以使用正则表达式来验证手机号。以下是一个基本的手机号验证正则表达式示例,可以用于检查中国大陆地区的手机号码:constphoneNumberRegex=/^1[3456789]\d{9}$/;//示例用法constphoneNumber="13812345678";if(phoneNumberRegex.test(phoneNumber)){cons......
  • 【php基础】正则表达式04
    1、正则表达式的介绍2、正则表达式的语法一、正则表达式的介绍正则表达式的介绍·正则表达式,又称规则表达式,通过一种特殊的语言来挑选符合条件的数据·在代码中简写,regex、regexp、RE·计算机科学的一个概念,通常被用来检索、替换那些符合某个模式(规则)的......
  • python 正则表达式之 怎么匹配一对中括号 [ ]
    ----------------------------------------------------------------------------------------在正则表达式中,前中括号[属于特殊字符,要匹配它,需要转义,那就加上转义字符\来进行转义,即加上\res=re.findall(r"\[[\dA-Z]*]",'AAAA[CEBT905A1B6A]/#')print(res)------[......
  • 模块都补充、软件开发目录规范、正则表达式
    名字查找顺序所谓的查找顺序就是在运行代码的时候调用的优先级,这里分成三个优先级:1.内存这里可以举一个极端一点的例子,就是我们引入一个模块,然后在引入代码后使用time.sleep停个十几秒,在停止的时间内我们直接把导入的模块文件删除,接下来继续让代码执行模块内的函数或引用变量名......