标题: 正则表达式语法学习和在线练习
作者: 梦幻之心星 sky-seeker@qq.com
标签: [#正则表达式,#语法,#学习,#练习]
目录: [语法]
日期: 2021-01-26
背景说明
- 正则表达式使搜索和替换操作更加灵活高效。
- 许多程序设计语言都支持使用正则表达式进行字符串操作。
- 正则表达式是由普通字符和特殊字符组成的文字模式。
- 正则表达式的组件可以是单个的字符、字符集合、字符范围、字符间的选择或者所有这些组件的任意组合。
- 正则表达式描述了一种字符串匹配的模式,可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等。
语法说明
普通字符
普通字符包括没有显式指定为元字符的所有可打印和不可打印字符。这包括所有大写和小写字母、所有数字、所有标点符号和一些其他符号。
字符 描述 [ABC]
匹配字符集合中的任意一个字符 [^ABC]
匹配字符集合中未包含的任意字符 [A-Z]
匹配指定范围内的任意字符 [^A-Z]
匹配任何不在指定范围内的任意字符
非打印字符
非打印字符也可以是正则表达式的组成部分。
字符 描述 \cx
匹配由x指明的控制字符。x的值必须为 A-Z
或a-z
之一\f
匹配一个换页符。等价于 \x0c
和\cL
\n
匹配一个换行符。等价于 \x0a
和\cJ
\r
匹配一个回车符。等价于 \x0d
和\cM
\t
匹配一个制表符。等价于 \x09
和\cI
\v
匹配一个垂直制表符。等价于 \x0b
和\cK
\s
匹配任何空白字符,包括空格、制表符、换页符等 \S
匹配任何非空白字符 \w
匹配字母、数字、下划线、汉字 \W
匹配非字母、数字、下划线、汉字 \d
匹配一个数字字符。等价于 [0-9]
\D
匹配一个非数字字符。等价于 [0-9]
特殊字符
匹配特殊字符时必须进行转义,即放置反斜杠字
\
在特殊字符前面。特别字符 描述 \
将下一个字符标记为一个特殊字符 .
匹配除换行符( \n
、\r
)之外的任何单个字符| 匹配二者之一
限定符
限定符用来指定正则表达式的一个给定组件的出现次数。
字符 描述 *
匹配前面的子表达式零次或多次。等价于 {0,}
+
匹配前面的子表达式一次或多次。等价于 {1,}
?
匹配前面的子表达式零次或一次。等价于 {0,1}
{n}
n
是一个非负整数。匹配确定的 n 次{n,}
n
是一个非负整数。至少匹配 n 次{n,m}
m
和n
均为非负整数,其中 n <= m 。最少匹配 n 次且最多匹配 m 次
捕获元
捕获分组的捕获匹配结果可以通过
$n
(表示第 n 个捕获组的内容)查看。字符 描述 (exp)
匹配 exp
并捕获这一匹配(?:exp)
匹配 exp
但不捕获匹配结果。也就是说这是一个非捕获匹配exp1(?=exp2)
正向肯定预查。用于查找 exp2
前面的exp1
exp1(?!exp2)
正向否定预查。用于查找后面不是 exp2
的exp1
(?<=exp2)exp1
反向肯定预查,与正向肯定预查类似,只是方向相反。用于查找 exp2
后面的exp1
(?
反向否定预查,与正向否定预查类似,只是方向相反。用于查找前面不是 exp2
的exp1
定位符
定位符将正则表达式固定到行首或行尾,不能与限定符一起使用。
字符 描述 ^
匹配输入字符串开始的位置 $
匹配输入字符串结尾的位置 \b
匹配一个单词边界,即单词和空格间的位置 \B
匹配非单词边界
修饰符
用于指定额外的匹配策略。位于表达式之外
修饰符 含义 描述 i
ignore
将匹配设置为不区分大小写 g
global
全局匹配,查找所有的匹配项。 m
multiline
多行匹配,使边界字符 ^
和$
匹配每一行的开头和结尾s
特殊字符圆点 .
中包含换行符\n
默认情况下的圆点 .
是匹配除换行符\n
之外的任何字符,加上s
修饰符之后,.
中包含换行符\n
。
运算符优先级
相同优先级的从左到右进行运算,不同优先级的运算先高后低。
运算符 描述 \
转义符 (), (?:), (?=), []
圆括号和方括号 *, +, ?, {n}, {n,}, {n,m}
限定符 ^, $, \任何元字符、任何字符 定位点和序列 | "或"操作字符具有高于替换运算符的优先级
在线练习
- RegexOne-学习正则表达式
- RegExr:学习,构建和测试RegEx
- 在线正则表达式测试器和调试器
注意事项
- 限定符
*
和+
都是贪婪匹配,会匹配尽可能多的字符。 - 在限定符的后面加上一个
?
可以实现懒惰匹配,匹配尽可能少的字符。
参考资料
- 正则表达式 – 教程 | 菜鸟教程
- 正则表达式30分钟入门教程
版权声明:本文为「梦幻之心星」原创,依据 CC BY-NC-SA 4.0 许可证进行授权,转载请附上原文出处链接及本声明。
博客园地址:https://www.cnblogs.com/Sky-seeker微信公众号:关注微信公众号,获取即时推送