有时需要使用正则表达式进行一些复杂的匹配,以便快速完成操作,以此做笔记。以便后续翻阅。
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
|
|
|
print
|
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
https://blog.csdn.net/yuyehui/article/details/104332359
https://blog.csdn.net/wangkai_123456/article/details/55254598
https://blog.csdn.net/chenxiaoscode/article/details/79172012
Notepad++
|
正则表达式
替换引言
正则
化入门进阶
我们在用各种文本编辑器,比如word、txt、vscode等时,有时候都会通过查找以及替换方便批操作。比如,去掉所有:符号,这些简单操作可以用于许多简单问题。但是对于更复杂的问题则比较难解决了,比如我想将所有[***]的[]去掉,留下***,而且不希望其他地方的[]被改动,这个时候就要用到
正则
化了。
Notepad++
的替换操作支持
正则表达式
替换。结合
正则
化的背景也能完成一些基本操作,但是更复杂的时候就需要更多技巧了,这里列一下,放遗忘 ???
定义一个匹配区域,该区域匹配的内容可以用标签 \1 \2 按照顺序使用,这些标签可以用在当前表达式,也可以用在替换表达式。( \1 表示第一个匹配内容,\2表示第二个,以此类推)
匹配字符集中的一个字符,[a-z] 匹配一个小写字母,[0-9]匹配一个数字,[A-Za-z]匹配一个字母,[0-9A-Za-z]匹配一