正则表达式基础入门学习

常用字符代表含义

\s	匹配任意的空白符,包括空格,制表符(Tab),换行符,中文全角空格等

\w	匹配字母或数字或下划线或汉字

\b	匹配单词的开始或结束

\d	匹配数字

.(点)	匹配除换行符以外的任意字符

+	匹配-重复一次或更多次
+	
*	匹配-重复零次或更多次
*	
?	匹配-重复零次或一次

{n}	匹配-重复n次

{n,}	匹配-重复n次或更多次

{n,m}	匹配-重复n到m次

^	匹配字符串的开始

$	匹配字符串的结束

\a 	报警字符(打印它的效果是电脑嘀一声) 

\b 	通常是单词分界位置,但如果在字符类里使用代表退格 

\t 	制表符,Tab 

\r 	回车 

\v 	竖向制表符 

\f 	换页符 

\n 	换行符 

\e 	Escape 

\0nn 	ASCII代码中八进制代码为nn的字符 

\xnn 	ASCII代码中十六进制代码为nn的字符 

\unnnn 	Unicode代码中十六进制代码为nnnn的字符 

\cN 	ASCII控制字符。比如\cC代表Ctrl+C
 
\A 	字符串开头(类似^,但不受处理多行选项的影响) 

\Z 	字符串结尾或行尾(不受处理多行选项的影响) 

\z 	字符串结尾(类似$,但不受处理多行选项的影响) 

\G 	当前搜索的开头 

\p{name} 		Unicode中命名为name的字符类,例如\p{IsGreek} 

(?>exp) 	贪婪子表达式 

(?<x>-<y>exp) 	平衡组 

(?im-nsx:exp) 	在子表达式exp中改变处理选项 

(?im-nsx) 		为表达式后面的部分改变处理选项 

(?(exp)yes|no) 	把exp当作零宽正向先行断言,如果在这个位置能匹配,使用yes作为此组的表达式;否则使用no 

(?(exp)yes) 	同上,只是使用空表达式作为no 

(?(name)yes|no)	 如果命名为name的组捕获到了内容,使用yes作为表达式;否则使用no 

(?(name)yes) 	同上,只是使用空表达式作为no 


字符转义

查找 . *   \      使用 \.  \*  \\     匹配 nnf.com.cn----nnf\.com\.cn

字符类

查找 . ? *       使用 [.?*]     [0-9] = \d

分支条件

解释:有n种规则,如果满足其中任意一种规则都应该当成匹配即用 | 把不同的规则分隔开

	eg:	0\d{2}-\d{8}|0\d{3}-\d{7}	
	1. 3位区号,8位本地号 010-12345678 
	2.  2. 	4位区号,7位本地号 0101-1234567


\(0\d{2}\)[- ]?\d{8}|0\d{2}[- ]?\d{8} 3位区号的电话号码,8位本地号,区号括号可加可不加
	注意:注意各条件使用顺序,满足从左到右,满足后将不在执行后面的分支条件
		
\d{5}-\d{4}|\d{5} 美国邮政编码   
 \d{5}|\d{5}-\d{4}   \d{5}放在左边,只会匹配5位邮编或9位邮编的前5位,不会匹配后面的数字

分组

重复多个字符-小括号来指定子表达式(分组)

简单逻辑的ip地址:(\d{1,3}\.){3}\d{1,3}  
具体理解:(\d{1,3}\.) 括号里面的子表达式-匹配最少1位,最多三位的数字和英文句号 {3} 重复三次 \d{1,3}  最少1位,最多三位的数字  
比如:22.999.888.123(虽然地址不存在,但逻辑成立)
具体逻辑的IP地址:((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)
拆分理解:  (  (  2[0-4] \d   |   25[0-5]   |   [01] ? \d\d ? )  \. )  {3}     (  2[0-4] \d  | 25[0-5] | [01]?\d\d? )

在这里插入图片描述

反义

	\W  	匹配任意不是字母,数字,下划线,汉字的字符
	\S		匹配任意不是空白符的字符
	\D 		匹配任意非数字的字符
	\B  	匹配不是单词开头或结束的位置
	[^s]	匹配除了s以外的任意字符
	[^aeiou]	匹配除了aeiou这几个字母以外的任意字符
	eg:
		\S+ 匹配不包含空白符的字符串    \D+ 匹配不包含数字的字符
		<a[^>]+> 匹配用尖括号括起来的以a开头的字符串

后向应用

使用小括号指定一个子表达式后,匹配这个子表达式的文本(也就是此分组捕获的内容)可以在表达式或其它程序中作进一步的处理。默认情况下,每个分组会自动拥有一个组号,规则是:从左向右,以分组的左括号为标志,第一个出现的分组的组号为1,第二个为2,以此类推

1.分组0对应整个正则表达式 
2.实际上组号分配过程是要从左向右扫描两遍的:第一遍只给未命名组分配,第二遍只给命名组分配--因此所有命名组的组号都大于未命名的组号 
3.可以使用(?:exp)这样的语法来剥夺一个分组对组号分配的参与权
作用:后向引用用于重复搜索前面某个分组匹配的文本

\b(\w+)\b\s+\1\b可以用来匹配重复的单词,像go go, 或者kitty kitty。这个表达式首先是一个单词,也就是单词开始处和结束处之间的多于一个的字母或数字(\b(\w+)\b),这个单词会被捕获到编号为1的分组中,然后是1个或几个空白符(\s+),最后是分组1中捕获的内容(也就是前面匹配的那个单词)(\1)。
高级:你也可以自己指定子表达式的组名。要指定一个子表达式的组名,请使用这样的语法:(?<Word>\w+)(或者把尖括号换成'也行:(?'Word'\w+)),这样就把\w+的组名指定为Word了。要反向引用这个分组捕获的内容,你可以使用\k<Word>,所以上一个例子也可以写成这样:\b(?<Word>\w+)\b\s+\k<Word>\b

常用分组语法

捕获		(exp) 				匹配exp,并捕获文本到自动命名的组里 
		(?<name>exp) 		匹配exp,并捕获文本到名称为name的组里,也可以写成(?'name'exp) 
		(?:exp) 			匹配exp,不捕获匹配的文本,也不给此分组分配组号 
零宽断言	(?=exp) 			匹配exp前面的位置 
		(?<=exp) 			匹配exp后面的位置 
		(?!exp) 			匹配后面跟的不是exp的位置 
		(?<!exp) 			匹配前面不是exp的位置 
注释		(?#comment) 		这种类型的分组不对正则表达式的处理产生任何影响,用于提供注释让人阅读 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值