首页 > 技术文章 > 又来折腾--正则表达式

rogge7 2018-08-23 16:51 原文

正则表达式30分钟入门教程 --很不错值得看,循序渐进的,诱敌深入,渐入佳境/美景
http://deerchao.net/tutorials/regex/regex-1.htm

正则表达式30分钟入门教程-BeJSON.com-- 这篇看着更好的样子
http://www.bejson.com/knownjson/regexJiaocheng/

 

----------------------

1.元字符介绍
    "^" :匹配行或者字符串的起始位置
     "$" :匹配行或字符串的结尾
    "\w":匹配字母,数字,下划线.
    "\d" : 匹配数字
     "." :匹配除了换行符以外的任何字符
    "[abc]":  匹配包含括号内元素的字符 
2.反义
    "\W" :匹配任意不是字母,数字,下划线 的字符
    "\S"  :匹配任意不是空白符的字符
    "\D"  :匹配任意非数字的字符
    "\B"  :匹配不是单词开头或结束的位置
     "[^abc]" :匹配除了abc以外的任意字符
3.量词
    "*" :重复零次或更多
    "+" :重复一次或更多次
    "?"  :重复零次或一次
    "{n,m}" :重复n到m次
    "{n}"     :重复n次
    "{n,}"    :重复n次或更多次
4限定符
    "*?" :重复任意次,但尽可能少重复  
    "+?" :重复1次或更多次,但尽可能少重复
    "??"  :重复0次或1次,但尽可能少重复
    "{n,m}?" :重复n到m次,但尽可能少重复
    "{n,}?"  :重复n次以上,但尽可能少重复

------------ 找一些  字符串 到这个网站测试一下,

在线正则表达式测试
http://tool.oschina.net/regex/# 

--个人实践--


\beos\.\w*\b 可以帅选出所有 eos.开头的

\b\w*.com 筛选出,com结尾的字符串,但是前面有两个点的筛选不出来。
\b\w*\.com 查找 .com 结尾的
\b\w*\.\w*\.com 只有两个点的.com结尾的被筛选出来
\b\w*\.\w*\.com|\b\w*\.com 一个点或两个点都被筛选出来。
\bvip\.\w*\b 筛选vip. 开头的

\b.*vip.*\b 包含vip的都会出来

\b.*[1-5]{1,12}.*\b 包含1到5数字的都出来

 


(\d{1,3}\.){3}\d{1,3} 匹配ip,但它也将匹配256.300.888.999这种 错误ip
正确的IP地址:((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)。
理解这个表达式的关键是理解2[0-4]\d|25[0-5]|[01]?\d\d?,
2[0-4]\d|25[0-5]|[01]?\d\d? 第一种2开头中间是0到4后面一个随意;第二种25开头,后面一位小于6;
第三种第一位0或1出现一次或者零次,第二位任意数字,第三位数字出现一次或者0次。

验证手机号码 实际代码中 ^[1][3,4,5,7,8][0-9]{9}$这样用,^$整个字符串中,1开头,第二位34578中一个,后接9位数字

--网络例子实践

正则小应用:批量修改文件名   ---里面有点代码
https://zhuanlan.zhihu.com/p/41655899

if (/(\d+\.jpg)/.test(v)) {
        fs.rename(v, 'baluobo' + RegExp.$1.padStart(6, '0'), () => {})
    }

这个正则 /(\d+\.jpg)/  这个正则会将 .jpg 连带前面的若干个数字一起取出来放到组里面。RegExp.$1 就取字符串出来,ru  10.jpg  9.jpg 。通过

padStart()js方法 向前补全字符串,例子中字符串总长度不够补0 ,自行百度此方法。

 拓展:看了这个例子让我觉得用传统的方式超级快完成。当然代码是帅的,

结合下方的网友例子。

ren 命令excel
https://www.kafan.cn/A/x3974odonj.html

用cmd  dir 输出此目录所有文件名,复制到xls中,拼接成:  ren 重命名命令。批量执行。完成。

 ren  拔萝卜-10.jpg   baluobo10.jpg

==拓展:

正则表达式引擎

正则表达式是一个很方便的匹配符号,但要实现这么复杂,功能如此强大的匹配语法,就必须要有一套算法来实现,而实现这套算法的东西就叫做正则表达式引擎。简单地说,实现正则表达式引擎的有两种方式:DFA 自动机(Deterministic Final Automata 确定型有穷自动机)和 NFA 自动机(Non deterministic Finite Automaton 不确定型有穷自动机)。

 

推荐阅读