notepad++下的正则表达式入门1

        正则表达式是对字符串(计算机中的字符串包含字母、数字、空格、标点符号等)操作的一种逻辑公式,就是用事先定义好的 “规则字符串,来过滤目标字符串。这个解释不太容易看懂,举个例子就很好理解了,比方说有这么一行字符串:

libX11;lksctp;mailcap;13569,18x:Wd lsp  what

        我们需要对这个字符串进行分行,分行规则是所有的标点符号(含空格)前的内容都要单独成行,这个我们在复制网页文字,或者汇总多人提交数据的时候很常见(毕竟每个人的断行风格不同),那么怎么做呢,直接手工一个个断行肯定是可以的,但是第一效率太低,第二重复性工作人工的准确率是比不上程序的,我们可以这么做:

复制到notepad++中,ctrl+H打开替换框,选择正则表达式,查找内容  [;:, ]+,替换为  \n


        是不是很神奇?是不是有一种想学习的冲动?那么,我们开始讲解:

        查找内容  [;:, ]+ ,表示 符号 ; : ,或者 空格,出现一次或者多次

        替换为  \n 表示替换为 换行

要学习正则表达式,我们就需要知道它的简单规则:

符号

含义

.

代表除换行符外的任意字符

*

匹配其左边的字符任意次

+

表示匹配一次到多次

?

其左边的字符被匹配0次或者1次

^

其右边的表达式被匹配在行首。如:^Z匹配以“Z”开头的行

$

其左边的表达式被匹配在行尾。如:e$匹配以“e”结尾的行

()

修改匹配规则顺序,或对匹配规则分组(标记从1开始)

{}

指定前面的字符或分组的出现次数

[]

匹配列表中任意单个字符。如:[ab]匹配“a”或“b”;[0-9]匹配任意单个数字

[^]

匹配列表之外的任意单个字符

\

转义字符 如:要使用 “\” 本身, 则应该使用\\

|

匹配表达式左边和右边的字符串。如:ab|bc匹配“ab”或“bc”

[0-9]

匹配任意单个数字

\d

匹配一个数字字符。等价于:[0-9]

\D

\d取反,匹配一个非数字字符。等价于:[^0-9]

\s

匹配任意单个空白字符 [ \t]

\S

\s取反的任意单个字符。

[a-z]

匹配26个小写字母

[A-Z]

匹配26个大写字母

\w

匹配包括下划线的任意单个字符。等价于:[A-Za-z0-9_]

\W

\w取反的任意单个字符。等价于:[^A-Za-z0-9_]

\b

匹配单词边界

\t

Tab制表符 注:扩展和正则表达式都支持

\r

回车符CR 注:扩展支持,正则表达式不支持

\n

换行符LF 注:扩展支持,正则表达式不支持

这里我略微又扩展了些内容:

符号

含义

^[0-9]+$

匹配纯数字的行

^\s*\r?\n

替换所有空行

^{3}.$

前三位

.{3}$

最后三位

^9(.+?)1$

以9开头1结尾,非贪婪模式,最短匹配

^9(.+)1$

以9开头1结尾,贪婪模式,最长匹配

^9\d{11}$

以9开头,后边跟11位数字

$0

替换保留查找内容,配合()使用,$0表示保留被查找行全部内容,$1表示保留被查找行的第一个括号内容

        解释一下\r \n,一个回车符一个换行符,其实对于大众来讲都是换行没什么区别,但是对于计算机爱好者来讲,其实也只是换行没什么区别,其主要的不同还是编码方式不同

        那么什么是贪婪模式,什么是非贪婪模式呢?比方说有一串数字  1393185214,我们要查找以9开头,以1结尾的数字,如果是用非贪婪模式 9(.+?)1 匹配到的是931,如果使用贪婪模式9(.+)1 匹配,匹配到的是9318521        

对于常见的正则匹配我们直接通过一个动画来演示吧

这些个都是比较普通的正则,我们看几个稍微复杂一点的

1、匹配邮箱地址

\b[A-Za-z0-9._%+-]+@[0-9A-Za-z.]+\.[A-Za-z]{2,}\b

解释: \b[A-Za-z0-9._%+-]+ 代表 左边界是 大小写字母数字下划线百分号加减号(大部分邮箱用户名是允许这些字符的)且出现一次或多次,这里需要说明的是[a-z0-9]匹配匹配的是小写字母或者数字,而不是说必须有小写字母和数字,@ 匹配邮箱地址中的 @,\. 代表邮箱中的 .,因为.是正则表达式中的特殊符号,所以要匹配就需要用到转义符号,[0-9A-Za-z.]+  表示 分隔符左边是 数字大小写字母组合或其组合,即邮箱服务提供商  如 126、google 21CN,[A-Za-z]{2,}: 匹配两个或更多大小写字母的组合,用于匹配电子邮件地址的顶级域名部分(例如:com、net、org等)。当然了,这里只能匹配到符合邮箱格式的字符串,而不能识别字符串是否是正确的邮箱地址,如下图

        它会匹配到 1、4、7、8行都是邮箱,为什么匹配不到6呢,是因为6的左边界没有字符,为什么要在8东哥后边加空格呢,因为我们限定了左边界的内容必须是数字、字母、下划线、百分号、加减号,如果没有空格,则8的左边界就不匹配了,加上空格,左边界变成了a,所以就被匹配到了。

        正则表达式的强大远不止此,有对正则表达式感兴趣的友友可以和东哥一起探讨哈!

  • 20
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值