这两天一直在时不时的和neo4j图数据库打交道。它的查询语句可以使用正则表达式,有一段时间没有自己写过正则表达式了,现在处于能看懂别人写的正则表达式,但是自己写不出来,语法规则都忘了。为了方便接下来的工作,所以特地复习复习正则表达式的语法。
正则表达式简介
正则表达式是用来匹配字符串的一系列匹配符,具备简介高效的特点,在很多语言中都有支持(java、python、javascript、php等等)。在windows的cmd命令中也同样支持,例如使用命令dir j*,那么只会罗列出所有以j开头的文件和文件夹。
正则表达式基本语法
正则表达式在在不同语言的支持语法略有不同,本文采用js的进行说明。js中使用正则表达式的方法为str.match(/表达式/),即需要加两个斜杠。以下所有的代码段第一行为代码,第二行为返回结果,实验是在chrome控制台进行的。
一直认为最好的学习方式就是实际操作,理论谁都能讲一大堆,但是实际做没做出来还真不知道。一个奇葩现象就是教软件工程的老师可能并没有在软件行业待过。
普通匹配符
普通匹配符能匹配与之对应的字符,默认区分大小写。
正则标记符
i :不区分大小写
g :全局匹配
m :多行匹配(暂不管它,我用的少)
参数直接加在最后一个斜杠的后面,比如”Hello Regx”.match(/regx/==i==),可以加多个参数。
之前是表达式一旦匹配成功,就不再向字符串后面查找了,加上g后,表示进行全局查找。最后返回的是一个数组。
多匹配符
\d :匹配数字,即0~9
\w :匹配数字、字母、下划线
. :匹配除换行的所有字符
需要注意的是,上面所有的匹配符都只能匹配一个字符。
自定义匹配符
比如中国的手机号都是以1开头,第二位只能是3、4、5、7、8,第3位只要是数字就行。如何匹配这样的字符串?
[] :匹配[]中的任意一个字符
如果在[]添加了^,代表取反。即[\^]表示除了中括号中的字符都满足。
修饰匹配次数
我们的手机号有11位,除了前2位有要求,其他9位度没有要求,那么是不是正则表达式就应该这样写呢?
很明显,这样写太麻烦,肯定有更好的方式,这里就可以修饰一下匹配次数啦。
? :最多出现1次
+ :至少出现1次
* :出现任意次数
{} :分下面四种情况
代表前面的匹配符出现n次
出现次数在n~m之间
至少出现n次
{, m}最多出现m次
例子很简单,一看就懂,不浪费时间。
完整匹配
按照上面的写法会出现下面的问题。
^ :在[]中代表取反,但在外面代表从开始匹配
$ :代表持续匹配到结束
特殊符号
到这里发现正则表达式确实很强大,仅仅几个简单的符号就能匹配字符串,但是如果我们要匹配的字符本身就是前面用到的符号怎么办呢?
匹配像$、^等特殊符号时,需要加转义字符\
条件分支
比如现在想匹配图片的文件名,包括jpg、png、jpeg、gif等等,这是多个选项,所以需要像编程语言一样,应该具备条件分支结构。
| :条件分支
() :有两层含义
括号中的内容成为一个独立的整体
括号的内容可以进行分组,单独匹配,若不需要此功能,则(?:)
贪婪与懒惰
因为在正则表达式中,默认是贪婪模式,尽可能多的匹配,可以在修饰数量的匹配符后面添加?,则代表懒惰。
到这里应该就差不多了,再深入的,就自我查询知识了。
——END——
领取专属 10元无门槛券
私享最新 技术干货