正则表达式 是每个程序员必备的技能,经常需要对用户的数据进行校验,这时候正则表达式的威力就发挥出来了下面的我对正则表达式使用的总结:
正则表达式的普通用法:
表示方法 | 描述 | 示例 |
re1|re2 | 匹配正则表达式 re1 或者 re2 | re1|re2 |
. | 匹配任何字符(除了\n 之外) | b.b 匹配bxb |
^ | 匹配字符串起始部分 | ^abc 匹配abc开始的字符 |
$ | 匹配字符串终止部分 | abc$ 匹配abc结束的字符 |
* | 匹配 0 次或者多次前面出现的正则表达式 | [A-Za-z0-9]* |
+ | 匹配 1 次或者多次前面出现的正则表达式 | [a-z]+.*$ |
? | ? 匹配 0 次或者 1 次前面出现的正则表达式 | goo? |
{N} | 匹配 N 次前面出现的正则表达式 | [0-9]{3} |
{M,N} | 匹配 M~N 次前面出现的正则表达式 | [0-9]{5,9} |
[…] | 匹配来自字符集的任意单一字符 | |
[..x-y..] | [..x-y..] 匹配 x~y 范围中的任意单一字符 [0-9], [A-Za-z] | [a-zA-Z0-9] |
[^…] | 不匹配此字符集中出现的任何一个字符,包括某一范围的字符(如果在此字符集中出现) | [^aeiou], [^A-Za-z0-9] |
(…) | 匹配封闭的正则表达式,然后另存为子组 | ([0-9]{3})?,f(oo|u)bar |
\d | 匹配任何十进制数字,与[0-9]一致( \D 与\d 相反,不匹配任何非数值型的数字) | |
\w | 匹配任何字母数字字符,与[A-Za-z0-9_]相同( \W 与之相反) | |
\s | 匹配任何空格字符,与[\n\t\r\v\f]相同( \S 与之相反) | |
\b | 匹配任何单词边界( \B 与之相反) | |
(*|+|?|{})? | 用于匹配上面频繁出现/重复出现符号的非贪婪版本(*、 +、 ?、 {}) | .*?[a-z] |
\c | 逐字匹配任何特殊字符 c(即,仅按照字面意义匹配,不匹配特殊含义) |
正则表达式的高级用法:
表示方法 | 描述 | 示例 |
(?:pattern) | 非获取匹配,匹配pattern但不获取匹配结果,不进行存储供以后使用。这在使用或字符“(|)”来组合一个模式的各个部分是很有用 | 例如“industr(?:y|ies)”就是一个比“industry|industries”更简略的表达式。 |
(?=pattern) | 非获取匹配,正向肯定预查,在任何匹配pattern的字符串开始处匹配查找字符串,该匹配不需要获取供以后使用 | 例如,“Windows(?=95|98|NT|2000)”能匹配“Windows2000”中的“Windows”,但不能匹配“Windows3.1”中的“Windows”。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始。 |
(?!pattern) | 非获取匹配,正向否定预查,在任何不匹配pattern的字符串开始处匹配查找字符串,该匹配不需要获取供以后使用 | 例如“Windows(?!95|98|NT|2000)”能匹配“Windows3.1”中的“Windows”,但不能匹配“Windows2000”中的“Windows”。 |
(?<=pattern) | 非获取匹配,反向肯定预查,与正向肯定预查类似,只是方向相反 | 例如,“(?<=95|98|NT|2000)Windows”能匹配“2000Windows”中的“Windows”,但不能匹配“3.1Windows”中的“Windows” |
(?<!pattern) | 非获取匹配,反向否定预查,与正向否定预查类似,只是方向相反 | 例如“(?<!95|98|NT|2000)Windows”能匹配“3.1Windows”中的“Windows”,但不能匹配“2000Windows”中的“Windows”。 |
参考:
https://www.cnblogs.com/allen2333/p/9835654.html
https://blog.youkuaiyun.com/bbc955625132551/article/details/72803630