正则表达式学习笔记

从某种意义上来说,正则就是通配符(如*、?)的加强版写法。


注释语法:(?#comment) ,其中comment代表注释内容。
正则中转义符为“/”
正则中可以使用条件进行限制,符号为“|”(意思应该是“或”)


. 可以匹配除换行外任意字符

* 匹配*前面的字符任意次(最少0次)

+ 匹配前面的字符重复1次或更多次

? 匹配前面的字符零次或一次

/b代表单词开始或结束位置(可以是空格、标点、回车、TAB等)

--例:/ba./b   代表匹配以a开始的单词后换行之前的本句所有字符
--/ba*/b  代表匹配仅以字母a组成的单词(如a、aa、aaaaa……)

 

/d 匹配一个数字(范围:0-9)

{n} 代表匹配前面的字符n次

{n,} 代表匹配前面的字符至少n次

{n,m} 代表匹配前面的字符至少n次,至多m次(符号均为半角,中间不可有空格)

--例:/d{5,} 代表需要匹配的对象中最少有连续5个数字

 


/s 匹配任何空白字符,包括空格、制表符、换页符等等。

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

^ 匹配字符串的开始
$ 匹配字符串的结束

--例:^/w{6}/s/w+$   代表整个文本必须是以由6个字符(仅包括字母、数字、开线、汉字)组成的单词开头,并

紧跟一个空白字符,然后是由至少一个单词字符构成的单词结束。

 


[字符]  这种形式可以预定要匹配的字符,比如[aeiou]可以匹配任意一个且仅一个元音字母。

[.?!]   匹配(.或?或!)这三个中任意一个标点符号。

 

 

/f 匹配一个换页符。等价于 /x0c 和 /cL。

/n 匹配一个换行符。等价于 /x0a 和 /cJ。

/r 匹配一个回车符。等价于 /x0d 和 /cM。

/t 匹配一个制表符。等价于 /x09 和 /cI。

/v 匹配一个垂直制表符。等价于 /x0b 和 /cK。

 


重复多个字符可以使用分组,符号为“()”。此处()内的内容应该看做一个整体。
每个组都会有自己的名字,若没有人为命名则从第一个级开始依次为:/1 /2 /3 ……

分组的命名方式为(?<组名>/d*/b)或(?'组名'/d*/b)。

人为命名的分组引用方式为:/k<组名> 或 /k'组名'

实际上组号分配过程要从左向右扫描两遍:第一遍只给未命名组分配,第二遍只给命名组分配--因此所有命名组

的组号都大于未命名的组号

分组0对应整个正则表达式

--例:/b(/w+)/b/s+/1/b 用这个表达式可以轻松的找出连续重复的单词,具体怎么解释~~ “你懂的”

 


反义:将元字符转换为大写既是反义。(这里不清楚是否所有的元字符大写都是反义)

/W 匹配任意不是字母,数字,下划线,汉字的字符
/B 匹配不是单词开头或结束的位置
[^x] 匹配除了x以外的任意字符
[^aeiou] 匹配除了aeiou这几个字母以外的任意字符

 

 

 

零宽断言,分为正向(既匹配)与负向(既不匹配)两种。

语法如下:
  (?=Examples)  匹配Examples前面的位置
  (?<=Examples)  匹配Examples后面的位置
  (?!Examples) 匹配((?!Examples)这个表达式)后面跟的不是Examples的位置
  (?<!Examples)  匹配((?!Examples)这个表达式)前面不是Examples的位置


顾名思义,使用零宽断言不浪费字符位置。比如需要查找:包含字母t且t后面不是字母c的一个单词。此时可以使

用如下正则表达式:/b/w*t[^c]/w*/b  。但如果此单词最后一位是t的情况下[^c]依然会继续匹配下一个字符,那

么若用来匹配do not giev up 会取出 "not giev"两个单词。

是的,这并不是我的原意。

那好的,现在我使用 /b/w*t(?!c)/w*/b 来匹配。哇太棒了,结果是"not"!不得不承认我是个天才~~

 


贪婪匹配(最多匹配)

在使整个表达式能得到匹配的前提下匹配尽可能多的字符。

--例:a.*b  用来匹配ababababababab时会将ababababababab整个提取出来。

懒惰匹配(最少匹配)

在能使整个匹配成功的前提下使用最少的重复

--例:a.*?b  用来匹配ababababababab时会将ab切割提取出来,既只提取了第一个ab。

 

 

 

 

捕获 (不怎么理解这东西··)

  (Examples)   匹配Examples,并捕获文本到自动命名的组里
  (?<name>Examples) 匹配Examples,并捕获文本到名称为name的组里,也可以写成

(?'name'Examples)
  (?:Examples)   匹配Examples,不捕获匹配的文本,也不给此分组分配组号

 

 

 

 

 

 

原义字符集:


/b 匹配一个单词边界,也就是指单词和空格(或标点)间的位置。

/B 匹配非单词边界。

/cx 匹配由x指明的控制字符。

/d 匹配一个数字字符。等价于 [0-9]。

/D 匹配一个非数字字符。等价于 [^0-9]。

/f 匹配一个换页符。等价于 /x0c 和 /cL。

/n 匹配一个换行符。等价于 /x0a 和 /cJ。

/r 匹配一个回车符。等价于 /x0d 和 /cM。

/s 匹配任何空白字符,包括空格、制表符、换页符等等。等价于[ /f/n/r/t/v]。

/S 匹配任何非空白字符。等价于 [^ /f/n/r/t/v]。

/t 匹配一个制表符。等价于 /x09 和 /cI。

/v 匹配一个垂直制表符。等价于 /x0b 和 /cK。

/w 匹配包括下划线的任何单词字符(包括汉字)。等价于’[A-Za-z0-9_]’。

/W 匹配任何非单词字符。等价于 ’[^A-Za-z0-9_]’。

/xn 匹配 n,其中 n 为十六进制转义值。十六进制转义值必须为确定的两个数字长。

/num 匹配 num,其中num是一个正整数。对所获取的匹配的引用。

/n 标识一个八进制转义值或一个后向引用。如果 /n 之前至少 n 个获取的子表达式,则 n 为后向引用。否则,

如果 n 为八进制数字 (0-7),则 n 为一个八进制转义值。

/nm 标识一个八进制转义值或一个后向引用。如果 /nm 之前至少有is preceded by at least nm 个获取得子表达

式,则 nm 为后向引用。如果 /nm 之前至少有 n 个获取,则 n 为一个后跟文字 m 的后向引用。如果前面的条件

都不满足,若 n 和 m 均为八进制数字 (0-7),则 /nm 将匹配八进制转义值 nm。

/nml 如果 n 为八进制数字 (0-3),且 m 和 l 均为八进制数字 (0-7),则匹配八进制转义值 nml。

/un 匹配 n,其中 n 是一个用四个十六进制数字表示的Unicode字符。

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值