游戏电视苹果数码历史美丽
投稿投诉
美丽时装
彩妆资讯
历史明星
乐活安卓
数码常识
驾车健康
苹果问答
网络发型
电视车载
室内电影
游戏科学
音乐整形

一看就懂正则表达式

  引入
  在讲正则表达式前,我们不妨先从一个场景来逐渐引入。
  你可能有过这样的经历:我们去某些网站注册帐号,当你在设置密码的时候,网站会提示你密码的长度范围,以及对应的规则限制(如下图)。
  根据上图,我们将密码设置规则可以描述为两个条件:
  (1)长度为616位;
  (2)密码中必须包含数字,大写字母,小写字母,特殊字符(指定字符);
  现在假设我们不知道正则表达式,作为程序员的你,该如何去实现这样一个密码验证呢?
  下面是我写的一个校验方法(样本):校验用户密码是否满足设置规则parampassword用户输入的密码returntrue满足;false不满足publicstaticbooleancheckPassword(Stringpassword){密码不能为空if(passwordnullpassword。isEmpty()){returnfalse;}校验密码长度(616位)intlenpassword。length();if(len6len16){returnfalse;}定义四种组合条件booleanhasNumberfalse;booleanhasSmallLetterfalse;booleanhasBigLetterfalse;booleanhasSpecialCharfalse;将密码字符串拆分为单个字符,然后对每个字符进行校验char〔〕charspassword。toCharArray();for(charc:chars){是否包含数字09if(c0c9){hasNumbertrue;continue;}是否包含小写字母azif(cacz){hasSmallLettertrue;continue;}是否包含大写字母AZif(cAcZ){hasBigLettertrue;continue;}是否满足指定的特殊字符if(S:。?。indexOf(c)0){hasSpecialChartrue;continue;}如果某个字符不在上面四种情况,则不满足规则returnfalse;}如果四种组合条件均满足,则符合密码设置规则returnhasNumberhasSmallLetterhasBigLetterhasSpecialChar;}
  这个方法写得对不对呢?我们不防用几组密码去进行验证下:
  可以看到,我们列举的8组密码,都得到了验证,说明我们的方法是OK的。
  但这样一个密码设置规则校验,我们就差不多写近30行的代码,是不是感觉有点累赘了呢?明明规则很简单,代码量却写了这么多,有没有什么方法可以简化我们的代码呢?当然有!于是,这时就可以让我们今天的主角正则表达式出场了。
  下面,则是具有相同校验功能,基于正则表达式的验证方法:通过正则表达式校验用户密码是否满足设置规则parampassword用户输入的密码returntrue满足;false不满足publicstaticbooleancheckPasswordByRegex(Stringpassword){returnPattern。matches((?。〔09〕)(?。〔az〕)(?。〔AZ〕)(?。〔S:。?〕)〔AZaz09S:。?〕{8,20}34;,password);}
  那么它写得到底对不对呢?于是,我们可以通过上面的示例数据,继续调用该方法来进行验证:
  通过结果我们可以看到,他也是符合我们预期的。于是我们发现,在不用正则表达式的时候,我们的代码量近30行,而使用了正则表达式,代码就浓缩为了1行,也就是说,使用正则表达式时可以简化我们的代码。
  但同时我们也可知,正则表达式具有一定的学习成本,如果你不懂正则表达式,那么你看它可能就是一头雾水,如果出了问题,更也就无从下手去修改它了。
  所以,学会正则表达式还是有必要的,至少以后你的同事写出来后,不会在脑子里出现这是写的啥玩意儿啊?怎么我看不懂的想法。正则表达式
  什么是正则表达式?通过上面的案例大家可能多少有点了解了。是的,他就是通过一行字符串,来描述一定的规则(如下图箭头所指红框处)。命名规范
  正则表达式的英文为RegularExpression,所以我们通常采用这两个单词的首几个字母合在一起,把正则表达式相关的变量名定义为regexp(单数)或regexps(复数)。
  比如:
  又比如,在Java的String类中,有几个相关替换的方法,它也是支持正则表达式的,他的参数命名也是regex。
  结构组成
  正则表达式通常由一些普通字符,以及一些元字符组成。
  普通字符:就是本身作为一个字符时,它不具有其他含义,像我们常用的大小写字母和数字。
  元字符:就是除了本身作为一个字符外,他还可以表达其他含义(下图是部分元字符节选)。
  其实,我们学习正则表达式,大部分就是基于元字符的学习。用途场景
  学习了正则表达式,我们可以有哪些用途场景呢?
  (1)做字符串的规则验证(比如前面的案例引入中,我们可以通过正则表达式来验证一个密码是否符合规则)。
  (2)做字符串的替换(比如将一个字符串中所有的大小写字母去掉,或者替换为指定符号)。
  (3)提取字符串中所需要的字符(比如一个字符串中所有的数字提取出来,组成一个新的字符串)。Java中的正则校验
  正则表达式主要用途就是校验字符串,那么在Java中,只需要通过下面这个方法即可进行校验。booleanresultPattern。matches(regex,input);
  其中:
  regex是我们需要写的正则表达式校验规则;
  input是我们待校验的字符串;
  返回的result就是我们校验的结果,当为true的时候,表示校验通过,当为false的时候,则表示校验不通过。正则元字符正则:普通字符
  当我们的正则表达式为一串普通字符(不包含元字符)时,校验字符串只有和正则一致时,才会校验通过。
  具体效果如下:
  说明:后面例子为节省篇幅,不显得累赘,就不再贴代码,只贴校验结果。正则:d
  d表示一个数字。
  如:
  aaad:表示验证的字符串后面必须以aaa开头,且以一个数字结尾。
  aaadbbb:aaa和bbb中间有一个数字
  aaadd:aaa后面跟2个数字
  注意:在Java定义的正则里,由于一个表示的是字符串转义,因此在Java定义带有的元字符时,还需要多写一个,即,至于其他语言,自己可查阅相关资料进行了解。
  正则:D
  D表示一个非数字,它和上面d的意思恰好相反。
  如:
  DDD:则表示一个长度为3,不包含数字的字符串。
  111D222:则表示111和222中间,必须包含一个非数字。
  正则:w
  w表示一个字母(大小写均可)、数字,或下划线。
  如:
  12w45:则表示12和45中间必须是一个字母,数字,或下划线。
  正则:WW与w相反,表示这个位置的字符既不是字母、数字,也不是下划线。
  也就是:特殊符号(除下划线),或者空格等满足。
  如:
  12w45:则表示12和45中间是一个非字母,非数字,或非下划线。
  正则:s
  s表示匹配一个看不见的符号,即空格或制表符(Tab键)
  如:
  88s99:则表示88和99中间须是一个空格或制表符。
  (由于我的编辑器设置了1个制表符替换为4个空格,所以这里就不列举制表符情况了)
  正则:S
  S与s相反,表示一个可以看得见的符号。
  如:
  88S99:则表示88和99中间须有一个看得见的符号。
  正则:。
  。(小数点)则表示和r之外的任何单个字符。
  如:
  。。。。:则表示任意四个字符
  正则:
  (竖线)则表示或的关系,表示检测的字符串须满足其中一个时,才符合条件。
  如:
  aabbcc:则表示输入的字符串须是aa,或bb,或cc其中的一个。
  注意,如果我们或者关系的前后还有其它字符时,需要用()将他们包裹起来。
  如:
  xx(aabbcc)yy:则表示输入的字符串须是xx开头,yy结尾,且中间是aa,或bb,或cc其中的一个。
  正则:〔abc〕
  〔〕表示匹配其中任意一个字符。
  如:
  a〔bcd〕e:则表示a和e的中间须是b,或c,或d其中的一个
  注意:用表示其中之一,他可以是字符,也可以是字符串。而只用中括号时,则只表示其中一个字符。正则:〔abc〕
  〔〕表示不与中括号里的任意字符匹配。
  如:
  a〔bcd〕e:则表示a和e的中间除b,c,d这三个字符外,其他的字符都满足。
  正则:〔az〕
  〔值1值2〕则表示值1到值2中间的所有字符都满足(包括值1和值2)。常用该正则来表示大小写字母范围,数字范围。
  如:
  a〔bd〕e:等同于a〔bcd〕e,因为bd其实就是b,c,d三个数。
  a〔09〕e:则表示a和e中间是一个数字,等同于ade(前面说过d表示一个数字)
  正则:〔az〕
  〔值1值2〕则表示除值1和值2之外的所有字符,都可以满足。
  如:
  a〔13〕e:则表示a和e中间的字符,只要不是1,2,3,则都满足。
  正则:um
  这里的num指number,也就是数字,当后面跟数字,表示匹配第几个括号中的结果。
  比如:现在有abcd字符串,当我们用小括号把c包裹起来后,然后在字符串后面写上1,即ab(c)d1,则这里的1就指c,因为1表示第1个小括号中的结果。
  ab(c)d1:等同于abcdc。
  如果我们继续把ab(c)d1中的d包括起来,并在后面写上2,即ab(c)(d)12,那么这里的2就表示d这个字符,因为第2个小括号的结果是d,所以整个表达式就等同于abcdcd。
  ab(c)(d)12:等同于abcdcd,也等同于ab(cd)1。
  正则:?
  ?表示匹配前面的子表达式零次或一次。
  如:
  abc?de:表示可匹配的字符串为abde(匹配0次c)或abcde(匹配1次c)。
  正则:
  匹配前面的子表达式一次或多次(次数1,即至少1次)
  如:
  abcde:ab和de之前至少有一个c。
  正则:{n}
  这里的n是一个非负整数。匹配确定的前面的子表达式n次。
  如:
  abc{3}de:表示ab和de之间有3个c。
  ab(xxyy){3}de:表示ab和de之间有xx或yy的个数,一起合计为3个。
  正则:{n,m}
  m和n均为非负整数,其中nm。最少匹配n次且最多匹配m次。
  如:
  abc{2,3}de:表示ab和de之间有2到3个c。
  正则:
  表示匹配前面的子表达式任意次。
  如:
  abcde:表示ab和de之间有任意个数(包括0)c。

2月1日,小鹏汽车(09868。HK)一月份交付量出炉2月1日,小鹏汽车(09868。HK)一月份交付量出炉。据悉,小鹏汽车历史累计交付量已突破15万台。2022年1月小鹏汽车交付12,922台,同比增长115,连续五个月交付破万……Reno6Pro的卖点只有骁龙870吗?还有其他亮点吗?谢邀,OPPOReno6Pro这款手机挺多看点的,并不止是骁龙870处理器。比如在外观方面,这次OPPOReno6Pro夏日晴海就采用了晶钻工艺3。0,对比前代的工艺来说……我的单板女孩开启滑雪初体验实力演绎雪上速度与激情星关系12月18日讯由北京鸿浩影视文化有限责任公司出品,由新锐导演张泰铭执导,国内首部滑雪题材都市浪漫励志剧集《我的单板女孩》近日开机,主要人物定妆照曝光。剧集讲述了一对不搭调……周雨彤来自海洋的你收官无泪演技受认可星关系讯:由青年导演吴强执导,姚瑶担任总编剧,人气偶像周雨彤、李宏毅领衔主演的奇幻爱情故事《来自海洋的你》已于今日完美收官。剧中,周雨彤饰演人鱼公主戴汐。该剧自播出以来,周雨彤……周雨彤来自海洋的你太虐心网友呼吁CP别散星关系讯:由青年导演吴强执导,姚瑶担任总编剧,人气偶像周雨彤、李宏毅领衔主演的奇幻爱情故事《来自海洋的你》正在热播中。剧中,周雨彤饰演人鱼公主戴汐。在上周更新的剧情中,戴汐夹在……来自海洋的你热播周雨彤解锁深海虐恋由青年导演吴强执导,姚瑶担任总编剧,人气偶像周雨彤、李宏毅领衔主演的奇幻爱情故事《来自海洋的你》正在热播中,剧中周雨彤饰演人鱼公主戴汐。随着故事的发展,本周剧情持续升温,真相即……来自海洋的你热播人鱼公主周雨彤泪腺失踪由周雨彤主演的奇幻爱情剧《来自海洋的你》正在热播。剧中,周雨彤饰演的戴汐是一个不谙世事、勇敢追爱的人鱼公主。在上周更新的剧情中,戴汐和池陆(李宏毅饰)上演停电吻甜翻观众,但随着……手机微信占内存太多?别再乱清理了,关掉这个功能,手机瞬间流畅大家使用微信的过程中肯定都有这么问题,一个聊天软件居然能够占用我们手机4、5个GB的空间,这还是聊天软件吗?其实微信占这么大空间是有道理的,因为朋友经常在群或者是朋友圈上……华为芯片新专利公开,直指芯片封测8月6日,华为申请的一项名为芯片封装结构、电子设备、芯片封装方法以及封装设备发明专利被公开。申请公布号:CN113228268A申请号:CN201880100493……王思思我才不要和你做朋友呢温暖收官挑战新类型再获肯定星关系6月17日讯王思思参演的校园成长青春剧《我才不要和你做朋友呢》日前已经会员收官。该剧讲述了单亲家庭长大的李进步回到1999年的东北,与少女时期的母亲李青桐相遇,两个女孩一……我才不要和你做朋友呢开播王思思打破框架挑战多元角色由田宇执导,陈昊宇、庄达菲、王思思、周彦辰等人主演的《我才不要和你做朋友呢》于近日开播,该剧主要讲述了高中生李进步巧合之下回到了20年前,与母亲李青桐成为好友一起成长的故事。其……扶摇五洲群雄将掀天煞风云杨幂阮经天心定志坚无惧诱惑星关系讯:由柠萌影业、柠萌悦心、企鹅影视联合出品,改编自天下归元小说《扶摇皇后》,解嬿嬿编剧,杨文军、谢泽、李才联合执导,杨晓培担任总制片人,杨幂、阮经天领衔主演,刘奕君、王劲……
爷青结!AdobeFlash走向穷途末路2021年初,虾米音乐关服了,米聊退场了,悟空问答下线了,曾代表一个时代的AdobeFlash,也在2020年12月31日迎来了它的终期。在当时那个网页中能动的部分全靠G……在Mac上释放磁盘空间和隐藏存储的提示和技巧随着我们的设备功能变得越来越强大,我们的Mac储存空间往往会更快地被各种文件所填满。下面小编为大家带来以下四个技巧来释放Mac存储空间和隐藏空间,赶快Get这项技能吧!如……三星简化了GalaxyStore用户界面,将重点放在游戏上三星正在改造GalaxyStore,并对应用程序的用户界面进行一些更改。在官方发布的声明中,三星将Galaxy商店的流线型体验描述为休闲和核心玩家的理想之地,这似乎是Fortn……苹果现在高刷屏都还没有,居然就要推出首款折叠屏手机了?继华为和三星推出折叠屏手机之后,其他手机厂商也开始盯上这个市场了。就在近日,根据台媒经济日报报道,供应链传出,苹果也将开发折叠屏手机了。一直在持续的累积自身的专利,还要求台湾的……7月国内汽车销量排名大众断崖式下跌,比亚迪新能源暴涨82。9近日,中国汽车工业协会公布了国内市场主要车企的7月份销量,前三名分别是上汽、广汽和长安,比亚迪相比去年同期销量大涨82。94,且主要来自其新能源车型,成为最大赢家。具体数……海思营收下滑,华为永不言弃,3纳米的麒麟9010正在研发2020年10月29日,华为发布了业界第一颗采用5纳米制造工艺的麒麟90005gsoc,CPU首次突破了3GHz,GPU直接拉满24核心,并且集成业界最先进的5g基带和npu,……三星智能手机在韩国的市场份额创历史新高尽管发生了新冠流感大流行,但三星的业务在第三季度实现了繁荣。其季度收入飙升至历史最高水平,并成功超越了苹果在美国的智能手机市场份额。一份最新报告显示,三星在国内市场的表现也非常……小米有品又一神器!真实版四驱兄弟,网友疾速眼镜蛇安排下说到童年,想必很多小伙伴都和鸡哥一样,不是灌篮高手,就是弹珠小子。放学回到家,正到饭点的时候,电视机里便会响起《四驱兄弟》熟悉的主题曲,各种四驱车以炫酷的技能战胜对手,赢得比赛……如何通过软件来获取B2B目标客户群体我们都知道社交APP在B2B市场营销领域是一个非常关键的存在,现在小编就以多年的经验来告诉你们,如何利用社交APP去精准捕捉客户。要知道你的用户是谁随着科学技术的大……外贸高手的客户跟进技巧,想不成交都难客户的跟进有多重要,调查显示。80的客户都是在第411次跟进后完成的。想要走到成交,那么大前提就是客户愿意跟你讲,那种一次就成功的几率是不多的。大部分客户还是在坚持……短途出行好帮手地平线8号POWER行李箱使用体验大家好,我是南北桃源作为一个长期跨市区上班的我来说,平时一周回家的时间也就一两趟,往返家与公司之间需要带不少衣服与生活用品,而且平时还有短期出差常驻项目的需求,夏天的时候……动能回收系统并不能替代刹车,浅谈特斯拉的制动为何饱受争议?随着温州特斯拉刹车失灵事故的反转,也让我们知道了慌乱中把油门当刹车有多么的可怕;实际上从这个因刹车导致的事故刚出现时,鄙人就感觉是驾驶习惯的问题、只不过那时候被一些不理性且主观……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网