开发之路,羊肠九曲,荆棘密布,幸得高人指点,前辈填坑,一路谨小慎微,终得工程圆满;其间填坑之经验,开路之历程,皆为精华,不可弃之;记录于此,以便事后回顾,亦想于有相关开发疑惑之同学做参考之用,文中如若有错,恳请雅正,不胜感激。
基本的正则表达式
在使用正则表达式的时候,我们可以很方便的完成一些字符串的操作,比如:验证、查找、替换、分割等等。
正则表达式主要有表达式(expressions)、量词(quantifiers)、**断言(assertions)**组成。
表达式
最简单的表达式就是一个字符。
字符集可以使用表达式如“[AEIOU]”,表示匹配所有大写元音字母;“[^AEIOU]”则表示匹配所有非元音字母;还有“[a-z]”表示所有的小写英文字母。
量词
量词说明表达式出现的次数,如**“x[1,2]” ** 表示“x”可以至少出现一次,至多出现两次。
量词 | 含义 |
---|---|
E? | 匹配0次或1次 |
E+ | 匹配1次或多次 |
E* | 匹配0次或多次 |
E[n] | 匹配n次 |
E[n,] | 匹配至少n次 |
E[,m] | 匹配最多m次 |
E[n,m] | 匹配0至少n次,最多m次 |
断言
“^”、“$”、“\b”等都是正则表达式的断言
符号 | 含义 |
---|---|
^ | 表示在字符串开头进行匹配 |
$ | 表示在字符串结尾进行匹配 |
\b | 单词边界 |
\B | 非单词边界 |
(?=E) | 表示表达式后边紧随E才进行匹配 |
(?!E) | 表示表达式后边不跟随E才进行匹配 |
例如:
“use(?=E\s+namespace)” 表示只有在use后边出现 namespace的时候才进行匹配
“use(?!E\s+namespace)” 表示只有在use后边不是 namespace的时候才进行匹配
“use\s+namespace” 表示匹配“use namespace”
示例-匹配邮箱
**匹配邮箱: ** melonchile@outlook.com
邮箱名 **
主要是字母或者数字或者下划线中划线组成
这样表达式应该为:[a-zA-Z0-9_-]+ **
域名 **
一般的域名或有多个分级域名,如“codeartisan.top”,'www.codeartisan.top",“vip.www.codeartisan.top”,
总结下来域名部分应该为“*.*.*.*” ** 这样
表达式应该为:**[a-zA-Z0-9_-]+(.[a-zA-Z0-9_-]+)+
**最终表达式: **
邮箱的基本格式为“名称@域名”,需要使用“^”匹配邮箱的开始部分,用“$”匹配邮箱结束部分以保证邮箱前后不能有其他字符,所以最终邮箱的正则表达式为:
^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$