正则,不一定每个程序员都会使用,正则中的语法也不是每一个人都能非常的了解,每个语言对正则的支持度又是一样的,一般来说正则表达式有POSIX类,PERL类等等。在这里不会把正则的初始教程也写下来,主要为已经会使用正则,需要知道一些技巧的朋友提供一些帮助。在这里主要以python为主,正则大致上都是相同的,所以如果用不了,可以看看所用语言的文档。
首先来说一下正则的一些基础知识:
- 正则中的一些特殊字符
- .
- ^
- $
- *
- 匹配0或者多个字符。比如ab*,它可以匹配a、ab、a+任意字符、ab+任意字符
- +
- ?
- {m}
- {m,n}
- \
- [ ]
- |
- 一些特殊表达式
- \A
- \b
- \B
- \d
- \D
- \s
- \S
- \w
- \W
- \Z
点(又称dot),可以匹配任何一个字符
在正则中表示一行字符的开始位置
在正则中表示一行字符的最后位置
匹配1或者多个字符。还是举ab+,他可以匹配ab、ab+任意字符
可以匹配0或者1个字符。
只能匹配指定m数量或之上的字符,例如a{6},只有当aaaaaa才能匹配,缺一个将无法匹配成功
可以匹配在m到n范围内数量的字符,a{3,5} 可以匹配从aaa到aaaaaa字符。
用于字符串的转移,这里面都是些特殊字符,但是我又想要匹配这些特殊字符,这个时候你就需要这个了。
指定需要匹配的范围内的字符,与上面指定数量是不一样的。 比如需要匹配a-c之间的字符,就可以写成[a-c]。
或者,这个是在两个范围匹配成,例如 a|e 只有当是a或者e才能成功。
上面已经把最最常用的特殊字符已经列出来了,我们在记一次 . ^ $ * + ? { } \ [ ] | ( )。如果你要匹配这些特殊字符记得需要加\才行哦。
只匹配标识字符串开始位置
匹配空字符串,只能作用于在一个字的开始或者结束位置。假设一个字符后面加了\b,那么这个字符之后如果有其他字符都将不能匹配成功,但是匹配的字串中含有) .却可以的。比如/\bab\b/,可以成功匹配ab、ab. 、(ab),但是无法匹配成功 cab 或者 abd
匹配空字符串,但是匹配的条件与\b相反,他只能作用于一个字的非开始或者结束位置。还是拿ab来说,/ab\B/,这时候可以匹配成abd,但是无法匹配成ab.
相当于 [0-9] 只能匹配数字
相当于[^0-9] 只能匹配非数字的字符
上面两个在中文情况下会有一些特殊。这个将在以后的文章中具体来说一下
匹配任何空白字符。相当于[ \t\n\r\f\v] 空格 换行之类
匹配任何非空白字符,相当于[^ \t\n\r\f\v]
匹配字母和数字,相当于[0-9A-Za-z_],如果在中文情况下只有0-9能成功,中文字符将失效
匹配除字母和数字之外的内容,相当于[^0-9A-Za-z_],这个情况下,中文是可以成功匹配的
只匹配标识字符串尾部位置
另外在某些语言中还有其他特殊的表达式,比如\v之类的,\r\n是做为换行而存在的,\t是table符,具体可以查看Ascii表。
需要获取数据,我们需要在在正则表达式上加入(),这样才能返回的匹配结果中获得匹配的内容。在这里面有一些方法在平常我们是不太使用的。可能某些语言不支持。
- (?P
exp) - (?P=name)
- (?:exp)
- (?<= exp)
- (?=exp)
当如此表达的时候,返回的匹配结果将是 { “name” => exp结果 }, 比如 (?
表示到上面那个表达式终止,这个需要与上面的同时时候才行。
这个用处在于配合(exp)匹配指定的内容,这个在严谨的匹配中非常有用,比如 ((?:ac_)[\w+]), 当只有ac_开头的内容才可以匹配,但是我不需要ac_ 这个时候只会得到\w+的内容,比如ac_tv最终只会得到tv的内容。
只匹配exp后面的内容,比如 (?<=abc)def, 这个时候abcdef只会匹配到def
只匹配exp前面的内容与上面相反
结合上面这些匹配技巧,你的表达式能最快最直接最精准的获得你所想要的内容。这里只说了一个大概,更多正则需要在操作中不断的尝试才能发现。
0 Comments.