0. 在线工具
RegExr: Learn, Build, & Test RegEx
1. 场景列举
-
vim
-
Linux命令行
-
sublime
-
编辑器
-
java、python等语言中
- ... ...
不同场景、不同版本语法可能不一样
2. 以下示例数据与基本语法
&2024
&As2024
2024#
2024sA#
abdcefgha_bdcefghABASDSADAASDASDASDJJJ&&&&&&&&%%%%^^^**&&&@@@!!!!!!!!!!!@@@@@@@@@#######$$$$$$$$%%%%%%%%%^^^^^^^&&&&&&&&*********(((((()))))))))))))))_____________++++++++++++++========----------~````````````~~~~~~~~~~············!!!!!!!!!!!!!!!!!!!¥¥¥¥¥¥¥¥¥¥……%%%%%%
$$$$$$%%%%%%%^^^^^^^^^……………………………………………………………………&&&******(((((((((())))))))((((((()))))))
--------————————_____-___---------————————————======+<<<<<<<<<>>>>>>>>>>>,,,,,,,,,,............///<《《《《《《《《《》》》》》》》》
、、、、、、、???????????????????|||||||\\\\\\\\\\\、、、、、、、{}{{{{{{{{{【【【【【【【【【】】】】】{{{]''''''''''"""""“”“:::::::::::::'''‘’‘’‘’‘’j🗡🗡}}}}}}}}}}}}
............ 😃
😈😈😈😈😈😈😈😈😈😈 😃😃😄😁😆😀😅🤣😂😂🙂🙃🫠🫠🫠🫠😍😍🤪🤑🤑🤭🤭🤫🤫
............ 😃
............
2024-05-01
2024.05.02
2024_05_03
2024:05:04
2024/05/05
20240506
05/01/2024
05/02/2024
05/03/2024
05/04/2024
05/05/2024
05/06/2024
pattern
Pattern
2.1 字符匹配(Basic Match)
简单字符就不提了,说下一些特殊的,以下举例说明
\w 匹配英文(包括大写、小写)、数字、下划线
\W 大写W,匹配与\w相反的,即 不是(字母、数字、下划线)的,
包括:特殊字符 ` ~ · ! !@ # $ ¥ % ^ …… & * ( ) ( )
- —— = + < , > . 《 》 / ? ? 、 | \ 、
{ } 【 】' " “ ” : :‘ ’ 🗡 😈 .
包括:换行\n
等等
\s 匹配空白,空格、或者制表符空格
\S 大写S,匹配非空白
\b 边界
\n 换行
| 可选
比如以下3个表达式
(p|P)attern
[pP]attern
pattern|Pattern
都可以匹配上 pattern Pattern
[x] 匹配方框内的一个字符,把可能的字符里面
[a-zA-Z0-9]
匹配其中一个字符:可以是小写字母、大写字母、数字
[^a-zA-Z0-9]
匹配与之前相反的,即不是(小写字母、大写字母、数字)的
2.2 位置匹配(Anchors)
^ 位置开始
$ 结束位置
2.3 量词(Quantifiers)
* 匹配0或多次
+ 匹配1或多次,至少匹配一次
{n} 匹配n次
{n,} 匹配至少n次
{m,n} 匹配最少m次,贪婪匹配。只要能够匹配到n就会按照n次去匹配
2.4 分组和引用(Groups)
匹配以下日期
2024-05-01
2024.05.02
2024_05_03
2024:05:04
2024/05/05
20240506
正则表达式 匹配与替换
#匹配以上所有日期
(\d{4})[-._/:]?(\d{2})[-._/:]?(\d{2})
#替换:转换格式,引用,并拼接/分隔:以下两种都可以完成。
\2/\3/\1
$2/$3/$1
输出
05/01/2024
05/02/2024
05/03/2024
05/04/2024
05/05/2024
05/06/2024
2.5 Lookahead
&2024
&As2024
2024#
2024sA#
#前面匹配:匹配数字前面的&
&(?=\d) #匹配到&2024
#前面匹配:匹配非数字前面的&
&(?!\d) #匹配到&As2024
2.6 Lookbehind
与lookbehind区别,括号内加上 <
&2024
&As2024
2024#
2024sA#
#后面匹配:匹配数字后面的#
(?<=\d)# #匹配到2024#
#后面匹配:匹配非数字后面的#
(?<!\d)#
场景
Linux命令行
- BRE、ERE
- BRE vs ERE (sed, a stream editor) - GNU
- grep命令
- grep introduction
不支持简写 如: \d
# echo 参数 -e enable interpretation of backslash escapes
# Grep searches one or more input files for lines containing a match to a specified pattern. By default, Grep outputs the matching lines.
#匹配所有的这些所列日期,并输出这些行
echo -e "2024-05-01\n2024.05.02\n2024_05_03\n2024:05:04\n2024/05/05\n20240506" | grep -E '^[0-9]{4}[-._/:]?[0-9]{2}[-._/:]?[0-9]{2}$'
#匹配数字01或者02并输出匹配到的行
echo -e "2024-05-01\n2024.05.02\n2024_05_03\n2024:05:04\n2024/05/05\n20240506" | grep -E '01|02'
vim
在vim中正则匹配下列日期
2024-05-01
2024.05.02
2024_05_03
2024:05:04
2024/05/05
20240506
在 Vim 中,可以使用正则表达式来搜索和匹配文本。要在 Vim 中匹配上述日期格式,可以使用以下步骤:
- 打开包含这些日期的文件。
- 进入命令模式(如果不在此模式下,按 Esc 键)。
- 使用 /(向前搜索)或 ?(向后搜索)来启动搜索,并输入的正则表达式。
可以使用以下正则表达式:
/\v^\d{4}[-._/:]?\d{2}[-._/:]?\d{2}$
这里 \v 标志用于启用“非常魔法”模式,它允许使用更简洁的正则表达式语法。
查找下一个匹配项,可以使用 n(下一个)或 N(上一个)。
另外,如果想高亮显示所有匹配项(而不是只搜索一个),可以使用 Vim 的 :match 或 :highlight 命令,但这通常需要更复杂的 Vim 脚本,因为 Vim 的内建高亮通常用于突出显示语法或其他特定模式,而不是所有正则表达式匹配项。
不过,可以通过在 Vim 中执行搜索并使用 n 和 N 键来逐个查看匹配项。如果只是想查看哪些行匹配,而不必高亮它们,那么上述搜索命令就足够了。
取消高亮显示
命令模式下输入:然后输入noh
:noh
Sublime正则替换
快捷键ctrl+h
Find:
匹配(3位数字)+4位数字+(4位数字)
(\d{3})\d{4}(\d{4})
Replace:
变量替换
$1提取第一个括号提取到的内容
$2提取第二个括号提取到的内容
$1****$2
或者
\1****\2
使用第一个和第二个括号内提取到的内容,并拼接上****
或者
点击Replace All全部替换
Everything 正则替换,添加扩展名后缀
原始文件名
^(.*?) - 副本$
括号内是提取的内容,
这个表达式匹配以 - 副本结尾的前面字符任意的字符串
^表示开始
.*匹配任意字符,?匹配0次或多次
新文件名
\1 - 副本.jpg
\1表示第一个括号内提取到的内容
拼接上-副本.jpg,这样保留原文件名的同时,添加了扩展名后缀.jpg
参考
- 【30分钟正则表达式教程】
- Linux vi/vim