正则表达式应用

开发工具与关键技术: VS 中的正则表达式
作者: 木有窝的鸟~小通
撰写时间:2019年5月2日

概念:正则表达式是对字符串操作的一种逻辑公式,就是用事先定义号的一些特定字符,及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。主要作用:正则表达式主要用来验证、搜索和替换。
运用正则表达式的方式很多种,可以直接运用软件,百度正则表达式转换工具等等,输入指定的代码/语法,她会可能匹配
出N种可能。而答案不唯一。
而正则表达式的名称为expression.模式pattem可以是任何复杂或简单的正则表达式(但必须是在JavaScript支持范 围内的),标志(flags)即用来表明正则表达式行为。
JavaScript中支持的三个标志(flags):
g:?表示全局(global)模式,表示pattern会应用于所有字符串,而不是找到一个匹配项后立即停止。
i?:表示不区分大小写(ignore)模式。即忽略pattern和字符串的大小写。
m:表示多行(multiple)模式。?即到一行文本末尾时还会继续查找下一行中是否存在匹配的项。
JavaScript中正则表达式主要的方法:
expression.test()?测字符串string,看它是否含有与regexp相匹配的文本。如果?string中含有这样的文本,该方法将返回 true,否则,返回false。
而正则表达式的使用基础语法中,而最为简单的就是匹配纯文本,纯文本看起来可能不像是个正则表达式,但它的确是正则表达式可以包含纯文本(甚至可以只包含纯文本)。
了解正则表达式最先单个匹配,主要功能上匹配一个位置的字符,主要为一些元字符使用,最为主要有好几种:
1、. 匹配除换行符以外的任意字符,
2、\w 匹配字母或数字、下划线。等价于’[A-Za-z0-9_]’
3、\s 匹配任意的空白符,包括空格、制表符、换页符等等。等价于?[\f\n\r\t\v]
4、\d 匹配数字,等价于[0-9]
5、\b 匹配单词的开始或结束
6、x|y 匹配?x?或?y
7、[xyz] 字符集合,匹配所包含的任意一个字符
8、[a-z] 字符范围。匹配指定范围内的任意字符

相反有正面教材那肯定会有反面教材,而反义通常单字母大小写区分,比如上面的反义如下:
\W 匹配任意不是字母、数字和下划线的字符,等价于’[∧A-Za-z0-9_]
\S 匹配任意不是空白符的字符。等价于?[∧\f\n\r\t\v]
\D 匹配任意非数字的字符,等价于[∧0-9]
\B 匹配不是单词开头或结束的位置
[∧x] 匹配除了x以外的任意字符
[∧asdfg] 匹配除了asdfg这几个字母以外的任意字符
[∧a-z] 匹配除了小写字母以外的任意字符

通常理解为大小写区分正反义,在中括号中,特殊代码不会被解释其他意义,在括号中加号是除了的意思,通俗的理解在中括号中,没有号的把里面的都匹配出来,有^号的除了里面之外的给匹配出来。
^号是匹配字符串的开始,$号是匹配字符串的结束。

基础语法重复也占重要部分,有好几种:
1、* 重复零次或更多次,等价于{0,}
2、+ 重复一次或更多次,等价于{1,}
3、? 重复零次或一次,等价于?{0,1}
4、{n} 重复n次
5、{n,} 重复n次或更多次
6、{n,m} 重复n到m次
基础语法中,贪婪与懒惰与位置指定和负向位置指定最为重要,一般匹配一些长字符串需要这两种方法比较多。
正则表达式默认是贪婪型的,通常的行为是匹配尽可能多的字符,?? 我们更需要懒惰匹配,也就是匹配尽可能少的字符。
前面给出的重复元字符都可以被转化为懒惰匹配模式,只要在它后面加 上一个问号 ?
1、*? 重复任意次,但尽可能少重复
2、+? 重复1次或更多次,但尽可能少重复
3、?? 重复0次或1次,但尽可能少重复
4、{n,m}? 重复n到m次,但尽可能少重复
5、{n,}? 重复n次以上,但尽可能少重复

而在位置指定和负向位置指定它能具体将某个具体位置给匹配出来快速的将字符串找出来,相比,单个匹配的要慢很多:
1、(?=exp):零宽先行断言,它匹配文本中的某些位置,这些位置的后面能匹配给定的后缀exp。??
2、(?<=exp):零宽后行断言,它匹配文本中的某些位置,这些位置的前面能给定的前缀匹配exp。?
3、(?!exp):零宽负向先行断言,只会匹配后缀exp不存在的位置。
4、(?<!exp):零宽负向后行断言来查找前缀exp不存在的位置

还有好几种很少用到的正则表达式基础(字符转义、分组、后向引用、注释、替换、运算符优先级)尽管用法是很少,但在匹配字符串起到关键作用。
将基础语法结合可以匹配出很多任意字符串,譬如学习中的匹配出以下字符串中邮箱:
题目为: “您好,这是我的邮箱:1sdsa45678@163.com,请您将修改意见发送到我的邮箱”
第一种答案: (?<=:)[a-zA-Z0-9.@].+?(?=,)
第二种答案:(?<=:).+(?=,)
通过各种正则表达式能结合出来的答案并不唯一,答案有长有短,可以说是灵活多变,在匹配过程中最好是兼顾需要,找到最优的解题方法。
也还有很多随机匹配的正则表达式如下:
在这里插入图片描述

在项目中,通常可以用正则表达式替换多余内容,匹配出文件名称等等如下:
在这里插入图片描述

在项目当中,随时会运用正则表达式找对应的代码,正是如此,学习相关知识打好稳固的基础。所以我觉得,想要写简单的字符串必须了解正则表达式各种用法,结合整体找到最容易的做法。使得在项目中简单的去完成相应的问题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值