正则表达式学习
基本语法
匹配
.匹配任意单个字符(除了换行符)\d匹配数字(等价于 [0-9])\w匹配字母、数字或下划线(等价于[a-zA-Z0-9_])\s匹配空白字符(空格、制表符、换行等)^匹配字符串开头$匹配字符串结尾*匹配前一个字符 0 次或多次+匹配前一个字符 1 次或多次?匹配前一个字符 0 次或 1 次{n}匹配前一个字符恰好 n 次{n,}匹配前一个字符至少 n 次{n,m}匹配前一个字符 n 到 m 次[abc]匹配 a、b 或 c 中的任意一个(abc)分组,匹配 abc 并捕获
跳过
A(?!B):匹配 A,但 A 后面不能是 B,负向零宽先行断言(?<!B)A:匹配 A,但 A 前面不能是 B,负向零宽后行断言[^ABC]:匹配非 A、B、C 的字(?:A|B)\KC:匹配 C,但前面可以是 A 或 B(\K会丢弃前面的匹配)A(*SKIP)(*FAIL)|B:跳过 A,只匹配 B
替换md表格居中
假设我有一个md表格如下:
| 左对齐标题 | 右对齐标题 | 默认对齐标题 | |
我想要把所有的---都换成:---:居中的样式,可以使用如下正则表达式:
(\|)\s*:?(-+):?\s* |
替换为:
$1:$2: |
学习:
()表示分组,与后面的$1、$2对应起来,没有分组的在替换的时候就会被丢弃\|:反斜杠转义|\s代表空白字符(空格、制表符、换行等),*代表匹配前一个字符 0 次或多次:?:?代表匹配前一个字符 0 次或 1 次(-+):+代表匹配前一个字符 1 次或多次
匹配所有空白
我有下面这段文本,我想要把前面的空格替换为-
- . 匹配任意单个字符(除了换行符) |
直接^\s+会匹配到md开头的tag,因此要使用零宽断言来跳过某些样式
使用
^(?!\s*-)\s+ |
学习:
(?!\s*-):(?!...)负向零宽先行断言,A(?!B)→ 匹配 A,但 A 后面不能是 B
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Diraw的世界!
右侧切换GitHub或邮箱评论
GiscusTwikoo