正则表达式学习
抽象但效率高,学会的话很方便:)
前言
想为铁锈战争语法写高亮的,但是我不会写匹配模式,所以我开始学习正则表达式。
这篇文章可能会继续更新。
推荐网站:
正则表达式文档
类别 | 表达式 | 描述 |
---|---|---|
修饰符 | /.../g |
全局匹配 |
/.../i |
忽略大小写 | |
/.../m |
多行模式 | |
/.../s |
包含换行符 | |
特殊字符 | . |
匹配任意单个字符(除了换行符) |
^ |
匹配输入字符串的开始位置 | |
$ |
匹配输入字符串的结束位置 | |
* |
匹配前面的子表达式零次或多次 | |
+ |
匹配前面的子表达式一次或多次 | |
? |
匹配前面的子表达式零次或一次 | |
{n} |
匹配确定的n次 | |
{n,} |
至少匹配n次 | |
{n,m} |
最少匹配n次且最多m次 | |
[] |
匹配括号内的任意字符(字符集) | |
` | ` | |
\ |
转义特殊字符或表示特殊序列的开始 | |
预定义字符集 | \d |
匹配任意数字(等价于[0-9] ) |
\D |
匹配任意非数字字符 | |
\w |
匹配任意字母数字字符(等价于[a-zA-Z0-9_] ) |
|
\W |
匹配任意非字母数字字符 | |
\s |
匹配任意空白字符(包括空格、制表符、换行符等) | |
\S |
匹配任意非空白字符 | |
量词 | * |
匹配前面的字符零次或多次 |
+ |
匹配前面的字符一次或多次 | |
? |
匹配前面的字符零次或一次 | |
{n} |
匹配前面的字符n次 | |
{n,} |
至少匹配n次 | |
{n,m} |
最少匹配n次且最多m次 | |
分组与捕获 | (...) |
将多个表达式组合成一个子表达式,并捕获匹配的文本 |
零宽断言 | ^ |
匹配字符串的开始 |
$ |
匹配字符串的结束 | |
\b |
匹配一个单词边界 | |
\B |
匹配一个非单词边界 | |
(?=...) |
正向前瞻断言,匹配…前面的位置 | |
(?!...) |
负向前瞻断言,匹配除了…外前面的位置 | |
(?<=...) |
正向后瞻断言,匹配…后面的位置 | |
(?<!...) |
负向后瞻断言,匹配除了…外后面的位置 |
一般而言,我们通常使用/.../g
来进行全局匹配
特殊字符
直接匹配
/nihao/g
skdabgnihaoniasbf
.
这个是通配符,匹配任意字符,例如
/./g
saklnfobovibo
^
这个是匹配开头的字符串,例如
/^class/g
classroom
$
这个是匹配输入字符串的结尾
/room$/g
classroom
*
这个是匹配前面的字符零次或多次,也就是计算理论中的星闭包 *
/lu*ck/g
luck,luuuuuck,lck
+
这个是匹配前面的字符一次或多次,也就是计算理论中的加法闭包或叫正闭包 +
/go+gle/g
google,gooogle,goooooogle
?
这个是匹配前面的字符零次或一次.
/apples?/g
apples,apple
{}
{n}
这个是匹配确定的n次
/hello{3}/g
hellooo,hello,helloo
{n,}
这个是至少匹配n次,也可以看作一种区间形式
/hello{2,}/g
hellooo,helloo,helloo
{n,m}
这个是最少匹配n次且最多m次,可以理解为区间
/hello{2,4}/g
hellooo,helloo,hello,hell,helloooo