0x00 背景
有时需要使用正则表达式进行一些复杂的匹配,以便快速完成操作,以此做笔记。以便后续翻阅。
0x01 常见表达式
.匹配任何一个字符,每行逐一匹配,而不匹配换行序列(\r或\n)。单独. 将匹配每行的每一个字符
* 其左边的字符被匹配任意次(0次或者多次). 例如 "be*" 匹配 "b", "be" 或者 "bee".
+ 其左边的字符被匹配至少一次(1次或者多次). 例如 "be+" 匹配 "be" 或者 "bee" 但是不匹配 "b".
? 其左边的字符被匹配0次或者1次. 例如 "be?" 匹配 "b" 或者 "be" 但是不匹配 "bee".
^ 其右边的表达式被匹配在一行的开始. 例如 "^A" 仅仅匹配以 "A" 开头的行.
$ 其左边的表达式被匹配在一行的结尾. 例如 "e$" 仅仅匹配以 "e" 结尾的行.
| 匹配表达式左边和右边的字符. 例如, "ab|bc" 匹配 "ab" 或者 "bc".
[] 匹配列表之中的任何单个字符. 例如, "[ab]" 匹配 "a" 或者 "b". "[0-9]" 匹配任意数字;[a-z],从a to到任何字符z;
[^] 匹配列表之外的任何单个字符. 例如, "[^ab]" 匹配 "a" 和 "b" 以外的字符; "[^0-9]" 匹配任意非数字字符; [^A-Za-z]表示除字母字符之外的任何字符。
[[:name:]]或[[:☒:]]⇒整个名为name的字符类。 对于许多人来说,还有一个单字母的short”类名☒。 请注意:[:name:]和[:☒:]必须在字符类[...]中才能具有特殊含义。
short | full name | description | equivalent character class |
alnum | letters and digits | ||
alpha | letters | ||
h | blank | spacing which is not a line terminator | [\t\x20\xA0] |
cntrl | control characters | [\x00-\x1F\x7F\x81\x8D\x8F\x90\x9D] | |
d | digit | digits | |
graph | graphical character, so essentially any character except for control chars, \0x7F, \x80 | ||
l | lower | lowercase letters | |
| printable characters | [\s[:graph:]] | |
punct | punctuation characters | [!"#$%&'()*+,\-./:;<=>?@\[\\\]^_{ | |
s | space | whitespace (word or line separator) | [\t\n\x0B\f\r\x20\x85\xA0\x{2028}\x{2029}] |
u | upper | uppercase letters | |
unicode | any character with code point above 255 | [\x{0100}-\x{FFFF}] | |
w | word | word characters | [_\d\l\u] |
xdigit | hexadecimal digits | [0-9A-Fa-f] |
\☒ ⇒这样,转义符。如要搜索\,则输入\\ 。要搜索[ , 则输入\[ 。 其中
\d 匹配任意数字,相当于:[0-9]。 \D 匹配非任意数字的任意字符,相当于[^[0-9]]
\l 匹配任意小字母,notepad++ 需要勾选【匹配大小写】,相当于[a-z]。 \L 匹配非小写字母的任意字符,相当于[^[a-z]]
\u 匹配任意大字母,notepad++ 需要勾选【匹配大小写】,相当于[A-Z]。 \U 匹配非小写字母的任意字符,相当于[^[A-Z]
\s 匹配空格(单词或行分隔符),相当于[[:space:]] 。 \S 匹配所有非空格(单词或行分隔符),相当于[^[:space:]]
\w 匹配任意单词,即除了标点和空格的所有字符。 \W 匹配除了字母数字外的所有标点、空格的字符
\h 匹配水平空间每一行当中的字符为空的地方,可以理解为空格。\H 匹配非水平空间
\v 匹配垂直空间每一行当中的字符为空的地方,可以理解为空格。\H 匹配非垂直空间
\t 制表符.
\n 新行.
() 影响表达式匹配的顺序,并且用作表达式的分组标记.
0x02 综合应用
- #此处是空白
- 其他部门的日常咨询。# 此处行的开头是空白,但中间存在内容
以上是空白行已经开头是空白的两行 || 要查找空白行或者开行是空格,则输入 ^\s || 要查找空白行,则输入:\r\n\r\n, 选择替换 为空,即可删除完全空白的行。
要查找每行的行首 || 要定位在每行的行首,则输入:^ 即可定位在每行的行首。
要查找每行的行尾 || 要定位在每行的行尾,则输入:$ 即可定位在每行的行尾。
4.111. [高风险] 越权访问 17 || 要查找4.111. [, 则输入:^\d.*\[ 选择替换,即可将4.111. [替换为空。
4.111. [高风险] 越权访问 17 ||要查找 高风险] 则输入:...]\s 选择替换,即可将 高风险] 替换为空。
4.111. [高风险] 越权访问 17 || 要查找4.111. [高风险] 则输入:^\d.*\[...]\s 选择替换,即可将4.111. [高风险] 替换为空。
4.111. [高风险] 越权访问 17 || 要查找 17 则输入:\s\d+$ 选择替换,即可将 17 替换为空。
4.111. [高风险] 越权访问 17 || 要查找 ] 越权访问 17 则输入:].* 选择替换,即可将 ] 越权访问 17 替换为空。
- 4.111. [高风险] 越权访问 17 || 要保留 高|中|低, 则输入:[^\高|\中|\低|\n] 选择替换,即可只保留高、中、低字符 。
- 4.111. [高风险] 越权访问 17 || 要保留 越权访问,则输入:.*]\s|\s\d+$ 选择替换,即可只保留越权访问字符 。
0x03 参考文章:
https://npp-user-manual.org/docs/searching/#extended-search-mode