NotePad++ 你不知道的用法
1 基本表达式
符号 | 解释 |
---|---|
. | 匹配任意字符,除了新一行(\n)。也就是说 “.”可以匹配 \r ,当文件中同时含有\r and \n时,会引起混乱。要匹配所有的字符,使用\s\S。 |
(…) | 这个匹配一个标签区域. 这个标签可以被访问,通过语法 \1访问第一个标签, \2 访问第二个, 同理 \3 \4 … \9。 这些标签可以用在当前正则表达式中,或则替search和replace中的换字符串。 |
\1, \2, etc | 在替换中代表1到9的标签区域(\1 to \9)。例如, 查找字符串 Fred([1-9])XXX 并替换为字符串 Sam\1YYY的方法,当在文件中找到Fred2XXX的字符串时,会替换为Sam2YYY。注意: 只有9个区域能使用,所以我们在使用时很安全,像\10\2 表示区域1和文本”0”以及区域2。 |
[…] | 表示一个字符集合, 例如 [abc]表示任意字符 a, b or c.我们也可以使用范围例如[a-z] 表示所以的小写字母。 |
[^…] | 表示字符补集. 例如, [^A-Za-z] 表示任意字符除了字母表。 |
^ | 匹配一行的开始(除非在集合中, 如下). |
$ | 匹配行尾. |
* | 匹配0或多次, 例如 Sa*m 匹配 Sm, Sam, Saam, Saaam 等等. |
+ | 匹配1次或多次,例如 Sa+m 匹配 Sam, Saam, Saaam 等等. |
? | 匹配0或者1次, 例如 Sa?m 匹配 Sm, Sam. |
{n} | 匹配确定的 n 次.例如, ‘Sa{2}m’ 匹配 Saam. |
{m,n} | 匹配至少m次,至多n次(如果n缺失,则任意次数).例如, ‘Sa{2,3}m’ 匹配 Saam or Saaam. ‘Sa{2,}m’ 与 ‘Saa+m’相同 |
*?, +?, ??, {n,m}? | 非贪心匹配,匹配第一个有效的匹配,通常 ‘<.>’ 会匹配整个 ‘content’字符串 –但 ‘<.?>’ 只匹配 ” .这个标记一个标签区域,这些区域可以用语法\1 \2 等访问多个对应1-9区域。 |
2 标记和分组 ✳
符号 | 解释 |
---|---|
(…) |
一组捕获. 可以通过\1 访问第一个组, \2 访问第二个. 如果是IDEA的话要提取正则表达式中匹配到的内容,使用$1 - $... 按顺序取(第一个表达式 到 第N个表达式匹配到的数据) |
(?:…) | 非捕获组. |
(?=…) | 非捕获组 – 向前断言. 例如’(.*)(?=ton)’ 表达式,当 遇到’Appleton’字符串时,会匹配为’Apple’. |
(?<=…) | 非捕获组 – 向后断言. 例如’(?<=sir) (.*)’ 表示式,当遇到’sir William’ 字符串时,匹配为’ William’. |
(?!…) | 非捕获组 – 消极的向前断言. 例如’.(?!e)’ 表达式,当遇到’Apple’时,会找到每个字母除了 ‘l’,因为它紧跟着 ‘e’. |
(? | 非捕获组 – 消极向后断言. 例如 ‘(? |
(?P…) | 命名所捕获的组. 提交一个名称到组中供后续使用,例如’(?PA[^\s]+)\s(?P=first)’ 会找到 ‘Apple Apple’. 类似的 ‘(A[^\s]+)\s\1’ 使用组名而不是数字. |
(?=name) | 匹配名为name的组. (?P…). |
(?#comment) | 批注 –括号中的内容在匹配时将被忽略。 |
3 特殊符号
符号 | 解释 |
---|---|
\s | 匹配空格. 注意,会匹配标记的末尾. 使用 [[:blank:]] 来避免匹配新一行。 |
\S | 匹配非空白 |
\w | 匹配单词字符 |
\W | 匹配非单词字符 |
\d | 匹配数字字符 |
\D | 匹配非数字字符 |
\b | 匹配单词边界. ‘\bW\w+’ 找到W开头的单词 |
\B | 匹配非单词边界. ‘\Be\B+’ – 找到位于单子中间的字母’e’ |
\< | This matches the start of a word using Scintilla’s definitions of words. |
> | This matches the end of a word using Scintilla’s definition of words. |
\x | 运行用x来表达可能具有其他意思的字符。例如, [ 用来插入到文本中作为[ 而不是作为字符集的开始. |
4 字符类
符号 | 解释 |
---|---|
[[:alpha:]] | 匹配字母字符: [A-Za-z] |
[[:digit:]] | 匹配数字字符: [0-9] |
[[:xdigit:]] | 匹配16进制字符: [0-9A-Fa-f] |
[[:alnum:]] | 匹配字母数字字符: [0-9A-Za-z] |
[[:lower:]] | 匹配小写字符: [a-z] |
[[:upper:]] | 匹配大写字符: [A-Z] |
[[:blank:]] | 匹配空白 (空格 or tab):[ \t] |
[[:space:]] | 匹配空白字符:[ \t\r\n\v\f] |
[[:punct:]] | 匹配标点字符: [-!”#$%&’()*+,./:;<=>?@[]_`{ |
[[:graph:]] | 匹配图形字符: [\x21-\x7E] |
[[:print:]] | 匹配可打印的字符 (graphical characters and spaces) |
[[:cntrl:]] | 匹配控制字符 |
5 替换操作
使用正则表达式的标记,通过()来包围想要用的字符,然后用\1 来替换字符串,第一个匹配分组(对应的第几个分组就用多少来匹配)。
注意:NotePad++ 在使用\1 \2来选择分组的话建议分组数量在10以内。如果分组数量大于等于10的话可以使用\$1 \$2来进行取值
例如:
如果是IDEA的话要提取正则表达式中匹配到的内容,使用\$1 - \$... 按顺序取(第一个表达式 到 第N个表达式匹配到的数据)
6 附录:
正则表达式中,“.”(点符号)匹配的是除了换行符“\n”以外的所有字符。但有时候我们需要匹配包括换行符在内的字符,经过一番搜索,发现了几种正则表达式匹配任意字符(包括换行符)的方法。
可以用 ([\s\S]*) ,也可以用 “([\d\D]*)”、“([\w\W]*)” 来匹配,就可以匹配包括换行符在内的任意字符。
下面是正则表达式元字符介绍
“^” :^会匹配行或者字符串的起始位置,有时还会匹配整个文档的起始位置。
“$” :$会匹配行或字符串的结尾
而且被匹配的字符必须是以This开头有空格也不行,必须以Regex结尾,也不能有空格与其它字符
“\b” :不会消耗任何字符只匹配一个位置,常用于匹配单词边界 如 我想从字符串中“This is Regex”匹配单独的单词 “is” 正则就要写成 “\bis\b”
“\d”: 匹配数字,
例如要匹配一个固定格式的电话号码以0开头前4位后7位,如0737-5686123 正则:^0\d\d\d-\d\d\d\d\d\d\d$ 这里只是为了介绍“\d”字符,实际上有更好的写法会在 下面介绍。
“\w”:匹配字母,数字,下划线。
例如我要匹配“a2345BCD__TTz” 正则:“\w+” 这里的“+”字符为一个量词指重复的次数,稍后会详细介绍。
“\s”:匹配空格
例如字符 “a b c” 正则:“\w\s\w\s\w” 一个字符后跟一个空格,如有字符间有多个空格直接把“\s” 写成 “\s+” 让空格重复
“.”:匹配除了换行符以外的任何字符
这个算是“\w”的加强版了“\w”不能匹配 空格 如果把字符串加上空格用“\w”就受限了,看下用 “.”是如何匹配字符“a23 4 5 B C D__TTz” 正则:“.+”
参考资料:https://blog.csdn.net/paul50060049/article/details/51714941
血肉苦弱机械飞升 :痛苦预示着超脱
本文来自博客园,作者:血肉苦弱机械飞升,转载请注明原文链接:https://www.cnblogs.com/supperlhg/p/15975235.html