的名字还是很容易理解的,一开始看一眼就知道是什么了,CodeNone虽然好,但其实是在模仿公众号的一个前身,英文总让人有点不适应。为了更加自成一体,我特地把名字改成了coffeeprogramming,有两个意思,一个是cafebabe,一个是吸收宇宙能量,刚好可以完全覆盖自己的情况,dddd。正则表达式无处不在?你是不是很羡慕别人熟练使用正则表达式,而你却不知道如何入门?您想开始使用正则表达式吗?它要么是一个长视频,要么是一本书。你觉得这样看起来很有趣吗?营销,很不爽是的,除了正则表达式这五个字,其他的都是废话。接下来说的可能不全面,但绝对可以做到28条原则,即掌握20%的知识去应对80%的工作场景。但是,要想真正掌握这5个词,除了熟悉正则表达式,别无他法。所有这些都是彼此相邻的字符。摒弃“加空格才好看,用+号拼接”的基本思路写什么配什么猫=>我有一些宠物,猫s,狗和猪。??Cat=>猫坐在垫子上。?123=>5678912345??123=>12456?Metacharacter这也是网上的说法,其实按照我的看法,就是一个特殊的字符。*+?.表示匹配除换行符以外的任意字符。at=>表示at后面跟着某个字符=>mat上的catsat。=>有3个匹配项c.t=>表示c后跟一个字符后跟t=>Thecatsatonthemat。=>有1次匹配*匹配前面的表达式0次或更多次[a-z]*=>表示匹配0次或更多字符=>Thecatsatonthemat=>有13次匹配,是的,有13个匹配项,1:""2:"he"3:""4:"cat"5:""6:"sat"7:""8:"on"9:""10:"“11:”“12:”垫子。13:“”。.表示任何字符,*表示0个或多个前面的字符,然后.*表示任何字符。\*=>任何字符=>Thecatsatonthemat=>2matches1:"Thecatsatonthemat"2:""+和*的作用是一样的,但是*匹配0个或多个字符,+匹配1个或多个字符,其他的没有?的作用。标志也是一样的,但是?为可选字符,则匹配0或1个字符()[]{}()括号内的内容视为一个整体(c.)t=>表示某物后跟c个字符作为一个整体,后跟一个t===克拉没错,在这个例子中,完全等价于this=>Thecatsatonthemat=>1matches(c|s|m)at=>表示括号中的任意一个字符一个在=>Thecatsatonthemat=>3matches(c.|.a)t=>matchesc.tor.at这两个正则表达式=>Thecatsatonthemat=>Thecatsatonthemat=>3匹配[]匹配任何括号中的内容[csm]at=>表示cat/sat/mat=>Thecatsatonthemat=>3matches[cm]at[.b]=>表示cat./catb/mat./matb四种情况=>Thecatsatonthemat.Helloworld=>1Matchat=>The.和括号中的*都是字符,上面没有特殊含义。{num}是量词动作,表示匹配num个前面的字符,{a,b}表示匹配大于等于a,小于等于b的前面字符,如果字符全部匹配,则匹配[之前的b个字符ld]{2,5}=>表示2到5l或2到5d或两个字符的2到5组合(不是一个)=>HelloWorldddddddd!=>注意这里的d都是连在一起的,为了显示的时候区分是一个空格=>3个匹配=>lllddddddddd第一个匹配没啥好说的,2个l,为什么第二个是ldddd而不是ld,长d、因为满足时优先级大Math.max(2,5)=5^$^以某个字符开头的字符串^T=>以T开头的字符串=>Thecatsatonthemat=>match1place,onlyoneT=>如果是^自然只匹配The3个字符。一般情况下,^表示以上意思,但在[]中使用时,表示反转[^(^T)]t=>不是以T开头但后面跟有t的字符串=>的catsatonthemat=>匹配$以某个字符结尾的4个字符串,不会进入细节,但值得注意的是,$放在[]中没有任何特殊含义,只是指字符'$'|\|就是代码中的or,没有别的意思(c|s|m)at=>cat/sat/mat=>Thecatsatonthemat=>3匹配\表示翻译字符这个对于开发者来说比较简单,这里就不赘述了。两种含义\d=>数字=>匹配数字=>\D=>前者反转,即匹配非数字\w=>单词=>匹配数字和大小写英文字母=>\W=>反转前者\s=>空格=>匹配空格字符=>\S=>否定前者和一些常用的\n=>下一行=>换行\t=>tab=>制表符,如果写在程序中,一般就是4个字符\r=>return=>匹配回车断言所谓断言简单的说就是匹配但不包含,这个可能用的比较多,比如场景需要匹配xxres,而不是xx只有资源断言分为肯定断言和否定断言。所谓肯定论断和否定论断分别对应于存在或不存在;也分为pre-previous和post-previousassertions,分别对应不需要的东西在前面还是后面。比如xxres不需要xx只要需要用res就可以了。断言。组合格式以?开头,正断言为=,负断言为!,第一个断言是<,它必须被包裹在()中。?=:Positivelookaheadassertion?<=:Positivelookaheadassertion?!:Negativelookaheadassertion?匹配cat/sat/mat,但不想要第一个字母,输出at=>Thecatsatonthemat。=>3matches?=:Forwardlookaheadassertion,don'tuse[\w](?=at)=>任何字母或数字后跟at,但只能是字母,后跟at不要=>cat坐在mat上。=>匹配3个位置?doesnotcontainTheorthebutbeenfollowedbysatormat=>Thecat,catsatontmat=>3个匹配,第一只猫不匹配,因为它前面有The。请注意The或thehere后跟一个空格。?!否定前瞻断言,在(T|t)he(?!\scat)=>匹配The或the之后不匹配(space)cat=>Thecatsatonthemat。=>匹配一个地方,因为前面的The后面是(space)cat另外还有一个类似的格式(?:)表示匹配,也是,但是说什么是非捕获匹配?总之,看不懂。菜鸟教程里有这么一段话,但是我试了下,不行吗?:没有区别。创建起来并不容易。如果对您有帮助,欢迎点赞收藏分享!以下是个人的公众号,有兴趣的可以关注一下,说不定就是你的宝藏公众号哦,基本2、3天1更技术文章!!!
