正则表达式
文章目录
测试网站
RegExr
编程胶囊
|>> 编程胶囊是个做题网站,适合于启蒙
学习网站菜鸟
正则表达式的用途
- 测试字符串内的模式
- 替换文本
- 基于模式匹配从字符串中提取子字符串
正则表达式 – 语法
正则表达式(regular expression)描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等。
构造正则表达式的方法和创建数学表达式的方法一样。也就是用多种元字符与运算符可以将小的表达式结合在一起来创建更大的表达式 。正则表达式的组件可以是单个的字符、字符集合、字符范围、字符间的选择或者所有这些组件的任意组合。
正则表达式是由普通字符(例如字符 a 到 z)以及特殊字符(称为"元字符")组成的文字模式。模式描述在搜索文本时要匹配的一个或多个字符串。正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配。
普通字符----常见字符
普通字符包括没有显式指定为元字符的所有可打印和不可打印字符。这包括所有大写和小写字母、所有数字、所有标点符号和一些其他符号。
字符 | 描述 |
---|---|
[…] | 匹配[ ]中显示的所有字符 |
[^…] | 匹配除了[ ]中显示的所有字符 |
[A-Z] | A-Z表示一个区间,匹配所有的区间内的字母,区间的具体内容参照assii |
\d | 匹配所有的数字 |
\D | 匹配所有的非数字 |
\s | \s是匹配所有空白符,包括换行 |
\S | 匹配所有的非空白字符,不包括换行 |
\w | 匹配字母,数字,下划线.等价于[A-Za-z0-9_] |
\W | 匹配所有的非字符 |
[ ]内的字符会匹配一次,匹配的字符仅占据本位置
非打印字符----不显示
字符 | 描述 |
---|---|
\cx | 匹配由x指明的控制字符,x从A-Z和a-z中选择,否则被视为原意’c’ |
\f | 匹配一个换页符==\cL(\cx表示法)和\x0c(ascii表示) |
\n | 匹配一个换行符。等价于 \x0a 和 \cJ。 |
\r | 匹配一个回车符。等价于 \x0d 和 \cM。 |
\s | 匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。注意 Unicode 正则表达式会匹配全角空格符。 |
\S | 匹配任何非空白字符。等价于 [^ \f\n\r\t\v]。 |
\t | 匹配一个制表符。等价于 \x09 和 \cI |
\v | 匹配一个垂直制表符。等价于 \x0b 和 \cK。 |
特殊字符----含义
对特殊字符进行查找时需要转义,转义字符为
许多元字符要求在试图匹配它们时特别对待.要匹配这些字符,必须首先使用转义字符将其转义.
特殊字符 | 描述 |
---|---|
$,* ,+,^ | 不做赘述 |
() | 标记一个子表达式的开始和结束的位置 |
. | 匹配除了换行符\n之外的所有单字符,他可以代表匹配任何单个字符,只能出现在方括号以外,如果要匹配包括’\n’需要使用[.\n] |
? | 可选字符,匹配前面的表达式(注意是表达式)0次或1次,或指明一个非贪婪限定符 |
{} | 标记限定符表达式的开始. |
|(管道符) | 指明两项之间的一个选择 |
限定符----次数
限定符用来指定正则表达式的一个给定组件必须出现多少次才能够满足匹配.
字符 | 描述 |
---|---|
* | 匹配前面的子表达式零次或多次 |
+ | 匹配前面的子表达式一次或多次 |
? | 匹配前面的子表达式零次或一次 |
{n} | n 是一个非负整数。匹配确定的 n 次 |
{n,} | n 是一个非负整数。至少匹配n 次 |
{n,m} | m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次 |
{n,m}? | 非贪婪模式,只会匹配n次而不会匹配m次(慵懒) |
定位符----位置
字符 | 描述 |
---|---|
^ | 匹配输入字符串开始的位置 |
$ | 匹配输入字符串结尾的位置 |
\b | 匹配一个单词边界,仅匹配有边界的单词(边界可以是空格,制表,逗号等等) |
\B | 非单词边界匹配 |
分组----提取小单元
- 圆括号将所有选择项括起来,相邻用管道符(也称or条件)分隔.
- 分组有一个很重要的功能就是捕获数据,所以()也称为捕获分组.
- 副作用:()会自动保存相关的匹配.此时可以用?:放在第一个选项前消除这种副作用
- 非捕获元
符号 | 描述 |
---|---|
?: | 不需要捕获某个分组的内容,但是又想使用分组的特性 |
?= | 查找捕获数据前的表达式 |
?<= | 查找捕获数据后的表达式 |
?! | 查找非捕获数据前的表达式 |
?<! | 查找非捕获数据后的表达式 |
分组的回溯引用
分组的回溯引用----使用\N可以引用编号为N的分组.
在先寻找一个子匹配,然后匹配会在接下来再次出现.
可以在后来需要出现的位置使用(+数字)的形式引用出现过的子匹配
(\w+)(\w+)\1\2
环视 or 预搜索
或称先行断言,后行断言
共分为四种
- 正向先行断言
- 反向先行断言
- 正向后行断言
- 反向后行断言
正向先行断言
- 表达式 XX(?=表达式)
- 指某个位置(XX之后直接全局视野)向右看,所在位置右侧必须能匹配表达式
反向先行断言
- 表达式 XX(?!表达式)
- 保证XX右边不能出现某字符
正向后行断言和反向后行断言
后行断言是从某一位置从右往左看
- 正向后行断言 表达式 (?<=表达式)
- 反向后行断言 表达式 (?<!表达式)