本文主要是介绍【万能钥匙】不要再说你不懂正则表达式,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
猿人谷,
期待与你同行!
正则表达式灵活运用,绝对是一把非常好用的尚方宝剑,因为它的使用场景非常广。正则强大到无边无际,不管什么编程语言,基本上都可以用到。具体的使用场景和好处,只要问度娘都能搜到一堆,这里我就不再安利正则了,咱直接上干货。
正则表达式通常用于两种任务:
√1.验证^和$,以匹配整个待验证字符串。
√2.搜索/替换^和$。
正则表达式:是指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串,简单说,就是我们写个模板,然后去匹配字符串。
介绍一下正则表达式中的一些常用语法:
^:匹配开始位置,^(a)这个就匹配开头必须为a。$:匹配结束位置,$(a)这个就匹配结尾必须为a。*:匹配前面的子表达式零次或者多次,如“xu*”这个表达式就能够匹配“x”和“xuu”。+:匹配前面的子表达式一次或者多次,如“xu+”这个表达式就能够匹配“xuu”和“xu”,但不能够匹配“x”,这个就是和“*”的区别。?:匹配前面的子表达式零次或者一次,如“xu?”这个表达式就能够匹配“jian(guo)?”就可以匹配“jian”和“jianguo”。{n}:n是一个非负数,匹配n次,如“guo{2}”,可以匹配“guoo”,不能匹配“guo”。{n,}:n是一个非负数,匹配至少n次。{n, m}:m、n都是非负数,最少匹配n次,最多匹配m次。(pattern):匹配pattern并获取匹配结果。(?:pattern):匹配pattern但不获取匹配结果。x|y:匹配x或y,如“(xu|jian)guo”匹配“xuguo”或者“jianguo”。[xyz]:字符集合,匹配所包含的任意字符。如“[abc]”可以匹配“apple”中的“a”。[^xyz]:匹配未被包含的字符。[a-z]:字符范围,匹配指定范围内的任意字符。[^a-z]:匹配指定不在范围内的任意字符。\b:匹配一个单词的边界,如“guo\b”可以匹配“xujianguo”中的“guo”。\B:匹配非单词边界,如“jian\B”可以匹配“xujianguo”中的“jian”。\d:匹配一个数字字符,等价于“[0-9]”。\D:匹配一个非数字字符。\f:匹配一个换页符。\n:匹配一个换行符。\r:匹配一个回车符。\s:匹配任何空白字符
下面列举一些常见的正则用法
匹配特定数字
^[1-9]\d*$ //匹配正整数
^-[1-9]\d*$ //匹配负整数
^-?[1-9]\d*$ //匹配整数
^[1-9]\d*|0$ //匹配非负整数(正整数 + 0)
^-[1-9]\d*|0$ //匹配非正整数(负整数 + 0)
^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$ //匹配正浮点数
^-([1-9]\d*\.\d*|0\.\d*[1-9]\d*)$ //匹配负浮点数
^-?([1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0)$ //匹配浮点数
^[1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0$ //匹配非负浮点数(正浮点数 + 0)
^(-([1-9]\d*\.\d*|0\.\d*[1-9]\d*))|0?\.0+|0$ //匹配非正浮点数(负浮点数 + 0)
评注:处理大量数据时有用,具体应用时注意修正
匹配特定字符串
^[A-Za-z]+$ //匹配由26个英文字母组成的字符串
^[A-Z]+$ //匹配由26个英文字母的大写组成的字符串
^[a-z]+$ //匹配由26个英文字母的小写组成的字符串
^[A-Za-z0-9]+$ //匹配由数字和26个英文字母组成的字符串
^\w+$ //匹配由数字、26个英文字母或者下划线组成的字符串
常用的匹配场景
匹配中文字符的正则表达式: [\u4e00-\u9fa5]
评注:匹配中文还真是个头疼的事,有了这个表达式就好办了匹配双字节字符(包括汉字在内):[^\x00-\xff]
评注:可以用来计算字符串的长度(一个双字节字符长度计2,ASCII字符计1)匹配空白行的正则表达式:\n\s*\r
评注:可以用来删除空白行匹配HTML标记的正则表达式:<(\S*?)[^>]*>.*?</\1>|<.*? />
评注:网上流传的版本太糟糕,上面这个也仅仅能匹配部分,对于复杂的嵌套标记依旧无能为力匹配首尾空白字符的正则表达式:^\s*|\s*$
评注:可以用来删除行首行尾的空白字符(包括空格、制表符、换页符等等),非常有用的表达式匹配Email地址的正则表达式:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
评注:表单验证时很实用匹配网址URL的正则表达式:[a-zA-z]+://[^\s]*
评注:网上流传的版本功能很有限,上面这个基本可以满足需求匹配帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$
评注:表单验证时很实用匹配国内电话号码:\d{3}-\d{8}|\d{4}-\d{7}
评注:匹配形式如 0511-4405222 或 021-87888822匹配腾讯QQ号:[1-9][0-9]{4,}
评注:腾讯QQ号从10000开始匹配中国邮政编码:[1-9]\d{5}(?!\d)
评注:中国邮政编码为6位数字匹配身份证:\d{15}|\d{18}
评注:中国的身份证为15位或18位匹配ip地址:\d+\.\d+\.\d+\.\d+
评注:提取ip地址时有用
当需要确定一个正则是否符合自己的需求时,可以借助于一些在线正则测试的网站来进行测试。
正则的使用场景非常多,只要灵活运用,绝对能给工作带来极大的解放。如大家在数据库里找到一堆的order_id,粘贴到nodepad编辑器后,需要给这一堆的order_id前面或后面添加符号'',用到正则来解决时,你就会发现正则的魔力到底有多大。
这篇关于【万能钥匙】不要再说你不懂正则表达式的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!