总会听到XX说,正则难,学不懂,等我有时间了再学!而这篇文章,让我来教你基础的正则,看完后相信你至少看得懂70%基础正则相关知识[适合初级朋友,高级的自行避让~~^-^],初级的放慢眼神认真看一遍、两遍!还不懂的就收藏起来再看一遍!
事先申明下面内容中:「」内为正则表达式,此符号是为了观看;用句号。代表空格。
一、我要给你很多网上找的材料么?NO!先来理清下正则匹配的原理。
先来个正则匹配表达式「simple」,这个正则表达式说的是匹配simple这个单词吗??(我好意思教你们这么雷同的东西么来浪费流量?)答案是:从现在起,请转变观念,正则匹配,不要把他们当作一个单词来看,「simple」要理解为:先匹配s,再匹配i,接下来再匹配m,依次顺序下去,注意,这点很重要,请先记牢了。---Why?(NO reason,just do it.以后你都要这么去看别人写的正则表达式就好了!),正则匹配按一个元素一个元素的匹配,即便括号包起来了,还是把括号里按一个个单独的元素来看。
二、记一些基础的点就好了,工作遇到太难的看到后再上网找啊!
基础的就那么点,我都帮你整理出来如下,请不要偷懒地把它们都记下来(理解--背诵)~:
^ 代表一行的开始
$ 代表一行的结束
在理解「^cat$」时要理解为以c作为一行的开头,接着是a,接着是t的字母结尾;
字符组:字符组外的理解要理解为“接下来是”,字符组内理解为“或”
「sep[ea]r[ea]te」 []内的理解为或的概念
「<H[123456]>」理解为匹配<H1>、<H2>、<H3>...等,在搜索HTML Header时有用「<H[123456]>」等于「<H[1-6]>」
「[0123456789abcdefABCEEF]」等于「[0-9a-fA-F]」
-是连字符,在字符组里是连字符,在字符组开头代表普通符号 字符组指的是方括号[]内的字符串
「[^1-6]」匹配除了1-6以外的任何字符(在字符组内,而且必须是紧接在字符组的第一个方括号后,代表元字符,^代表排除的意思)
在egrep里q[^u]找不到Iraq单词(Iraq后面回车换行)。
[^u]表示除了u,每行结尾通常有换行符,但是egrep在检查正则表达式前都把这些换行符去掉了,所以匹配不了。
「.」点,匹配任意字符
「03.17.76」可以搜索03/17/76、03-17-76、03.17.76 当然也可以匹配03417576,找的时候看自己对文本检索需要达到这样的精度。精确的匹配正则表达式为「03[-/.]17[-/.]76」连字符必须是在[之后,不然是表示范围的意思。
「|」多选,或的意思。
「A正则表达式|B正则表达式」能同时匹配其中的任意一个正则表达式。
「gr[ea]y」可以写成「grey|gray」或者「gr(e|a)y」
()起到限制的作用。
-i 参数表示忽略大小写。
单词分界符「\<」「\>」。比如「\<cat\>」匹配单词cat而不会把包含cat这三个字符的其他单词找出来。(某些版本的egrep可能不支持)
可选项元素:
「?」?代表可选项。
「colou?r」表示u这个字母可以有也可以没有,不是成功匹配的必要元素。
「+」前面元素出现一次或者多次,无法进行任何一次匹配会报错。
「*」前面元素出现任意次或者不出现
括号的第二个用处,\1表示前面括号内的内容。多个括号时用\2\3理解
「\<([a-zA-Z]+)。+\1\>」 在文本查找里查找任意单词连续出现两次的情况。
查找匹配的字符本身是元字符的话,用神奇的转义符「\」
要查找「eta.att.com」时,因为.也是元字符,所以要查找「eta\.att\.com」点在字符组内无效。
{1,5}区间,定义前面元素出现的次数。
三、正则匹配,应用面很广,不要一直害怕,学着去学会它,工作起来能更有效率!
以上是我对正则的心得和基础的正则知识,希望对你有用。初学的朋友,希望你能再看一遍,基础的正则,其实就这么回事~
补充:后台观察到有接近50%查看文章的朋友收藏分享了文章,但是讨论的朋友较少,如果有任何建议欢迎留言评论,简单发表下意见也行,让我知道你们的想法~~
最后还是套路:欢迎讨论,记得点下关注本头条号!争取每天都有一篇5~10分钟内的短小文章供你学习~
