正则表达式语法 0 基础速成。

什么是正则表达式

用来匹配字符串的一种语法。可以从大量的字符串中匹配出自己想要的一部分内容。

说明

本文将采用粉色背景代表正则表达式语法,蓝色背景代表正则表达式匹配到的内容。

元字符

.匹配换行符以外的任意字符
例子
表达式:a.g
文本:august orange
匹配结果:augang


^匹配字符串的开始
例子
表达式:^b..
文本:bird is black color
匹配结果:bir


$匹配字符串的结束
例子
表达式:er$
文本:His efforts were fruitless, however

匹配结果:er


\w匹配字母数字或者下划线
例子
表达式:\w
文本:价格:$1.5, 名字:Aaron_C
匹配结果:15Aaron_C


\d匹配任意数字,同等于[0-9]
例子
表达式:\d
文本:我有100个气球

匹配结果:100


\s匹配任意不可见字符,例如空格、制表符、换行符等
例子
表达式:\s
文本:I got three gold coins.
匹配结果:    (四个空格)


\b匹配单词的开始或结束
例子
表达式:\bcup\b
文本:I have three cups and he has one cup.
匹配结果:cup

反义

\D匹配不是数字的字符
例子
表达式:\D
文本:1西15

匹配结果:个西瓜斤


\W匹配不是字母、数字、下划线的字符
例子
表达式:\W
文本:This music style R&B.

匹配结果:   &.(三个空格&.)


\S匹配任意可见字符
例子
表达式:\S
文本:Macbookistooexpensive.

匹配结果:Macbookistooexpensive.


\B匹配不是单词开头或结束的位置
例子
表达式:can\B
文本:can I have a candy?
匹配结果:can

限定符

+重复1次或更多次, 同等于{1,}
例子
表达式:10+
文本:1乘以10不等于100

匹配结果:10100


?重复0次或1次, 同等于{0,1}
例子
表达式:10?
文本:我有1杯水和10本书还有100支笔
匹配结果:11010


*重复任意次, 同等于{0,}
例子
表达式:10*
文本:1乘以10不等于100

匹配结果:110100

分支条件

|将多个匹配条件进行逻辑“或”运算。
例子
表达式:ant|ch
文本:I like this restaurantvery much.
匹配结果:antch

括号

(括号)、[中括号]、{大括号}
(xyz)匹配括号内的内容,并且使用此字符向后引用。
例子
表达式:([a-z])+
文本:这杯water特别clear

匹配结果:waterclear


[xyz]匹配字符范围。
例子
表达式:[a-z]
文本:Bluepeninmyhand.

匹配结果:luepeninmyhand


[^xyz]不匹配字符范围
例子
表达式:[^a-z]
文本:May I have a coffee.
匹配结果:M I   .(M空格I空格空格空格.)


{x}重复x次
例子
表达式:o{2}
文本:It feels good to look at the moon.
匹配结果:oooooo


{x,}重复x次或者大于x次
例子
表达式:0{2,}
文本:2000块的预算买电脑。
匹配结果:000


{x,y}重复x到y次
例子
表达式:0{2,3}
文本:一百=100,一千=1000,一万=10000
匹配结果:00000000

转义符

\表示转义序列,或去掉元字符的转义。
例子
表达式:\\|\^
文本:KL\bwo^K0c
匹配结果:\^

贪婪与非贪婪模式

通常情况下,在整个表达式能匹配到文本的前提下,尽可能匹配更多的字符。
例子
表达式:a.*c
文本:aabbcsdwosbabbc
匹配结果:aabbcsdwosbabbc


有时会需要非贪婪匹配,也就是匹配尽可能少的字符。限定符都可以变为非贪婪模式。
例子
表达式:a.*?c
文本:aabbcsdwosbabbc
匹配结果:aabbcabbc