正则表达式(1) — 元字符

常用元字符
代码           说明
.             相配除换行符以外的自由字符
\w             相称字母或数字或下划线或汉字
\s             相配放肆的空白符
\d             相称数字
\b             匹配单词的早先或收尾
^             相配行的开始
$             相配行的完成

常用元字符
代码           说明
.             匹配除换行符以外的任性字符
\w             匹配字母或数字或下划线或汉字
\s             相称大4的空白符
\d             相配数字
\b             相配单词的上马或收尾
^             相称行的始发
$             相配行的终止

8.小结


咱俩总括一下到近来停止学到的元字符

元字符 名称 匹配对象
. 逗号 单个任意字符
[···] 字符组 列出的任意字符
[^···] 排除型字符组 未列出的任意字符
^ 脱字符 行的起始位置
$ 美元符 行的结束位置
< 反斜杠-小于 单词的起始位置(某些版本的egrep可能不支持)
\> 反斜杠-大于 单词的结束位置(某些版本的egrep可能不支持)
| 竖线 匹配分隔两边的任意一个表达式
(···) 括号 限制竖线的作用范围,其他功能下文论述

常用反义元字符
代码   说明
\W       相称自便不是字母,数字,下划线,汉字的字符
\S        相称率性不是空白符的字符
\D      相称任意非数字的字符
\B        相配不是单词早先或终止的职位
[^x]       相称除了x以外的随机字符
[^aeiou]   相配除了aeiou那么些假名以外的随便字符

常用重复限定符
代码       说明
*         重复零次或更频繁

三.排除型字符组


3.1
[^123]取代[123],代表除了1二三以外的任何因素,当中的^代表排除的乐趣。
3.2
q[^u]是相配字母q后不是u的图景,可是我们要思量到部分主题材料,正是q只怕是大写的Q,所以提出大家向来用[Qq][^u]。还也可以有正是q正好位于行尾,紧跟着的会是换行符,若是正则未有保留换行符,那么q之后就不曾成分,同样相当不到(贰个字符组,即便是排除型字符组,也需求相称二个字符)。
3.3
[^x]:相称2个不是x的字符,而不是说,只有当那几个岗位不是x时能力合作(刚刚说的刚刚在行尾的景况)。

只顾:这里的^表示免除之意,与事先在字符组外部表示行锚点的^差异,这里的^是二个元字符(在字符组内部且紧跟首个方括号随后)。

正则表达式括号的效益
壹、限制多选拔的范围 (Fri|壹)st 那样写会相称Frist或一st 假若去掉,则
Fri|一st就是相配 Fri或1st
二、将若干个字符举办组合,受量词的还要效用。比如 th+ 表示特出 th thh
thhh(h无数十次),假诺是(th)+,则1贰分的是th thth ththth(th无多次)
叁、反向引用,即前面括号相配到的东西纪念与背后,常用于相配重复单词。
4、分组

正则表明式括号的法力
1、限制多选用的限量 (Fri|1)st 这样写会相配Frist或一st 借使去掉,则
Fri|壹st正是相称 Fri或一st
贰、将若干个字符实行重组,受量词的还要效用。举个例子 th+ 表示分外 th thh
thhh(h无数次),就算是(th)+,则至极的是th thth ththth(th无多次)
3、反向引用,即前边括号相配到的东西纪念与背后,常用来相称重复单词。
4、分组

《正则实例实行(环视本性)》

  •         重复一遍或更频繁
    ?         重复零次或一回
    {n}       重复n次
    {n,}        重复n次或更频繁
    {n,m}       重复n到m次

正则表明式之元字符

 1、最易精晓的元字符。

  脱字符  ^   :表示相当行首的文本

    英镑符  $ :表示相配行尾的文书

  例如:

^cat    //匹配以c作为一行的第一个字符是c,然后是一个a,紧接着一个t的文本

  以上正则表明式相称的是:

  比如一个行  catdogcat  上边正则表明式相称第多少个cat。

  特殊正则表达:

^cat$    //匹配行开头是cat,然后就是行末尾的cat,说白了就是一行中仅仅只包含cat的行,没有其他字符。

^$        //匹配行开头,然后就是行末尾了,说白了就是匹配一个空行(没有任何字符,也没有空白字符)

^          //匹配行的开头,每一行都匹配

二、字符组

  相称若干字符之一

[]    //字符串用中括号括起来,表示匹配其中的任一字符,相当于或的意思

  例如:

gr[ea]y    //匹配grey或gray

  在那之中连字符 – 表示几个范围,比如<h[1-6]> 与
<h[123456]>的机能一样。别的类似的还应该有[a-z],[A-Z]。

  这里不可不要留意的是只有在字符组内部连字符 – 才是元字符,不然它就只异常普通的连字符 – 。

3、排除型字符组

  用[^…]取代[…]其一字符组就能合营任何未列出的字符。

[^...]    //[^...]表示匹配所有方括号里未列出的字符

  例如:

r[^abc]r  //匹配出rar,rbr,rcr之外的任意r*r文本

  上面包车型客车例证要注意下,举例正则表明式  q[^u] 不会相配 Qantas 和 Iraq
那又是为啥吧?

 
因为正则表明式是分别轻重缓急写的。其次q[^u]渴求q前面跟二个非u的字符,即必须含有3个字符。

 

  在极其重申,排除型字符组表示“相称五个未列出的字符”而不是“不要相配列出的字符”。分歧在于前者必供给合营三个。

   其它还要重申一点,在[]里面是绝非元字符的,都意味自个儿的意思,举个例子[.]就代表极其三个点.的情趣。

四、点号.匹配自便字符  

  元字符.是用来相配任性字符的字符组的渐变写法。

  .    //匹配任意字符的字符组简便写法

  例如:

  .a    //匹配 Aa 1a ga 等等

五、多选结构

   |
是多个不胜直爽的元字符,它的意味是。依靠它,大家能够把不相同的子表明式组合成三个总的表明式,而这么些总表达式又能够包容肆意的子表明式。

|    //或 多选分支    选择两者中的一个    注意|将左右两边分为两部分,而不管左右两边有多长多乱

   例如:

gray|grey    //既可匹配gray又可匹配grey    相当于gr[ae]y

  假如将|写在中括号[]在那之中,那么 | 就不是元字符,它和a
e同样,只表示小编字符。

  对于表明式gr(a|e)来讲,括号是必须的,假设未有括号,那么gra|ey的乐趣就成了
gra | ea 即相称gry或相配ey。

  再举个例子说 Frist|一st  与  (Fri|壹)st  表示的是同一个情趣

  其它要特别注意下,上边包车型大巴那些例子

  ^from|subject|date:  与  ^(from|subject|date):  之间的分别

  对于前者:只好相配 ^from 或 subject 或 date:

  对于后者: 能够相配 ^from: 或 ^subject: 或 ^date:

6、忽略大小写

   当然忽略大小写你能够用 [Aa]bc  代表
 abc  ,然则如此不便利。正则表明式提供二个  -i  。用于忽略大小写相称。

  -i    //用于忽略大小写匹配

7、单词分界符

  \b  代表单词分界符

\b  //匹配单词的开始或结束

八、可选项因素

  ?  代表可挑选,把她加在1个字符的末端,就意味着此处容许出现这一个字符,但是它的面世并非相配成功的供给条件。

?    //跟在一个字符后面,容许此字符出现0次或1次

  例如:

colou?r    //可以匹配colour或color

  然后来讲一下构成别的元字符使用的动静:

  例如:

  July|Jul  可缩小为  July?

  肆th|四    可收缩为  4(th)?

9、重复出现

  加号+和星号*的意义与问号类似,的意义都以限量字符出现的次数。因而问号?加号+星号*那二个元字符统称量词。

?     //可以出现0次或1次    
+    //至少要出现1次,可以出现无数次    
*    //可以出现0次或出现无数次

十、规定再次出现次数的范围:区间

  {min,max}  大括号内的数字用于表示某字符允许出现的次数区间。

{min,max}  //大括号内的数字用于表示某字符允许出现的次数区间。

  这里要记住,{}里面包车型地铁参数不料定要写全七个,也足以只是写一个,那样表示单独相配内定的字符数,比如\b{6}\b相称刚刚陆个假名的单词。

  {n,}  相称n次或更频仍,  {伍,}  相配五次以上

10壹、括号以及反向引用

  后面已经说过括号的多少个效益:限制多选拔的限定,将若干字符组合为七个单元,受问号或星号之类的量词成效。未来在的话一种括号的用法,分组,此东西有所记忆的法力,即在正则表明式内部仍然能够回想上次相当到的是什么样。那个事物用语言说不精通,书本上又是美术又是线的,这里仅仅用三个例子:

  例子深入分析:首先说美赞臣下括号里面代表如何看头,

  (\b[A-Za-z]+ +)  匹配单词的开始,然后是大小写字母至少1次,然后空格至少1次。说白了就是 空格然后是匹配不区分大小写的一寸字母然后是任意个空格
  
  OK,再来说下\1\b  \b当然就是单词的结尾了,那么\1呢?这个就是分组的作用了,\1代表的就是前面括号里面的东西,也就是一个单词。

  因此,整个正则表达式的意思是,匹配间隔了N个空格的重复的单词。不懂也没办法了。

十二、美妙的转义

   \ 转义符它的效应是使元字符失去它的含义,仅仅表示其一般性输入中字符的意义。

   举例,小编要匹配字符 .
字符*  就需求在前头加反斜杠,\.  \*剔除它元字符的意思。

   一些供给转义的字符列表    \ * + ? | { [ ( ) ^ $ . # 和
空白

十3、一些其余的元字符

  \w  相称字母,汉字,数字,下划线

  \W  相配非字母,非汉字,非数字,非下划线

  \s   匹配空白符

  \S  匹配非空白符

  \d  相配数字

  \D  相称非数字

来源: <>

12.转义


12.1
ega\.att\.com:匹配ega.att.com,把本来是元字符的.倒车为常见字符。
12.2 \([a-zA-Z]+\):用来合作2个括号内的单词。

正则表明式之元字符

 1、最易驾驭的元字符。

  脱字符  ^   :表示卓殊行首的文件

    美金符  $ :表示相称行尾的公文

  例如:

^cat    //匹配以c作为一行的第一个字符是c,然后是一个a,紧接着一个t的文本

  以上正则表明式相配的是:

  比方三个行  catdogcat  上面正则表达式相配第五个cat。

  特殊正则表达:

^cat$    //匹配行开头是cat,然后就是行末尾的cat,说白了就是一行中仅仅只包含cat的行,没有其他字符。    ^$        //匹配行开头,然后就是行末尾了,说白了就是匹配一个空行(没有任何字符,也没有空白字符)    ^          //匹配行的开头,每一行都匹配

  下面用C#说明:

        static void Main(string[] args)          {              Regex reg = new Regex("^cat");              reg.Match("catdog");              Console.WriteLine(reg.Match("catdog"));     //输出 cat              Console.WriteLine(reg.Match("dogcat"));     //输出 空白(啥都不输出)                Regex reg2 = new Regex("cat$");              Console.WriteLine(reg2.Match("catdog"));      //输出 空白(啥都不输出)              Console.WriteLine(reg2.Match("dogcat"));      //输出 cat                Console.ReadKey();          }

二、字符组

  相配若干字符之壹

[]    //字符串用中括号括起来,表示匹配其中的任一字符,相当于或的意思

  例如:

gr[ea]y    //匹配grey或gray

  个中连字符 – 表示1个限量,举个例子<h[1-6]> 与
<h[123456]>的作用同样。别的类似的还应该有[a-z],[A-Z]。

  这里不可不要注意的是唯有在字符组内部连字符 –
才是元字符,否则它就只非凡普通的连字符 – 。

        static void Main(string[] args)          {              Regex reg = new Regex("<h[1-6]>");              string str = "<div><h1>你在他乡还好吗?</h1></div>";              Console.WriteLine(reg.Match(str));      //输出 <h1>                Console.ReadKey();          }

叁、排除型字符组

  用[^…]取代[…]以此字符组就能合作任何未列出的字符。

[^...]    //[^...]表示匹配所有方括号里未列出的字符

  例如:

r[^abc]r  //匹配出rar,rbr,rcr之外的任意r*r文本

  上边包车型客车例子要专注下,举个例子正则表明式  q[^u] 不会相配 Qantas 和 Iraq
那又是干吗呢?

 
因为正则说明式是分别轻重缓急写的。其次q[^u]供给q前面跟二个非u的字符,即必须带有贰个字符。

        static void Main(string[] args)          {              Regex reg = new Regex("a[^123456]");              Console.WriteLine(reg.Match("a1a2a3a4a5a6a7")); //输出 a7                Console.ReadKey();          }

  在特别强调,排除型字符组表示“相配三个未列出的字符”而不是“不要相配列出的字符”。不一致在于前者必须求同盟3个。

   其余还要重申一点,在[]里面是未曾元字符的,都表示自己的意思,举个例子[.]就表示1贰分3个点.的情致。

四、点号.相配任性字符  

  元字符.是用来相配大四字符的字符组的渐变写法。

  .    //匹配任意字符的字符组简便写法

  例如:

  .a    //匹配 Aa 1a ga 等等

   例子:

        static void Main(string[] args)          {              Regex reg = new Regex(".c");              Console.WriteLine(reg.Match("abcdefg")); //输出 bc                Console.ReadKey();          }

伍、多选结构

   |
是三个格外爽直的元字符,它的意味是。依据它,我们能够把分化的子表达式组合成多个总的表明式,而这么些总表达式又可以协作放肆的子表明式。

|    //或 多选分支    选择两者中的一个    注意|将左右两边分为两部分,而不管左右两边有多长多乱

   例如:

gray|grey    //既可匹配gray又可匹配grey    相当于gr[ae]y

  假设将|写在中括号[]内部,那么 | 就不是元字符,它和a
e同样,只表示本身字符。

  对于表明式gr(a|e)来讲,括号是必须的,假诺未有括号,那么gra|ey的情趣就成了
gra | ea 即匹配gry或相配ey。

  再举例 Frist|壹st  与  (Fri|一)st  表示的是同二个意味

   C#DEMO:

        static void Main(string[] args)          {              Regex reg = new Regex("abc|def");              Console.WriteLine(reg.Match("bcdefg"));     //输出 def                Console.ReadKey();          }

  其余要特别注意下,上面包车型客车这些事例

  ^from|subject|date:  与  ^(from|subject|date):  之间的区分

  对于前者:只可以相称 ^from 或 subject 或 date:

  对于后者: 能够相称 ^from: 或 ^subject: 或 ^date:

六、忽略大小写

   当然忽略大小写你能够用 [Aa]bc  代表
 abc  ,不过这么不便宜。正则表明式提供三个  -i  。用于忽略大小写相称。

  -i    //用于忽略大小写匹配

  不过在C#中貌似不匡助-i的写法,小编测试过-i写在前边,可是力不从心协作,要不经意大小写貌似要通过构造函数的属性设定:

        static void Main(string[] args)          {              Regex reg = new Regex("Abc",RegexOptions.IgnoreCase);              Console.WriteLine(reg.Match("abcdefg"));     //输出 abc                Console.ReadKey();          }

七、单词分界符

  \b  表示单词分界符

\b  //匹配单词的开始或结束

  代码示例:

        static void Main(string[] args)          {              Regex reg = new Regex(@"\bLove\b");              Console.WriteLine(reg.Match("I Love You!"));     //输出 Love                Console.ReadKey();          }

捌、可选项因素

  ?  代表可采纳,把他加在3个字符的前边,就表示此处容许出现这么些字符,但是它的出现并非相配成功的必要条件。

?    //跟在一个字符后面,容许此字符出现0次或1次

  例如:

colou?r    //可以匹配colour或color

  C#Demo:

        static void Main(string[] args)          {              Regex reg = new Regex(@"colou?r");              Console.WriteLine(reg.Match("what is color?"));     //输出 color              Console.WriteLine(reg.Match("what is colour?"));     //输出 colour                Console.ReadKey();          }

  然后来讲一下构成其余元字符使用的情事:

  例如:

  July|Jul  可收缩为  July?

  四th|四    可减少为  四(th)?

九、重复出现

  加号+和星号*的功能与问号类似,的作用都是限量字符出现的次数。因而问号?加号+星号*那二个元字符统称量词。

?     //可以出现0次或1次      +    //至少要出现1次,可以出现无数次      *    //可以出现0次或出现无数次

  Demo:

        static void Main(string[] args)          {              Regex reg = new Regex(@"colo*r");              Console.WriteLine(reg.Match("colooor"));    //输出 colooor                Regex reg2 = new Regex(@"colo*r");              Console.WriteLine(reg2.Match("colr"));    //输出 colr                Regex reg3 = new Regex(@"colo+r");              Console.WriteLine(reg3.Match("colr"));    //输出 空白(啥都不输出,这就是+和*的区别了)                Console.ReadKey();          }

10、规定再一次现身次数的限制:区间

  {min,max}  大括号内的数字用于表示某字符允许现身的次数区间。

{min,max}  //大括号内的数字用于表示某字符允许出现的次数区间。

  C# Demo:

        static void Main(string[] args)          {              Regex reg = new Regex(@"colo{3,5}r");              Console.WriteLine(reg.Match("colooor"));    //输出 colooor                Regex reg2 = new Regex(@"colo{3,5}r");              Console.WriteLine(reg2.Match("coloor"));    //输出 空白(啥都不输出)  至少3个,但是字符串里只有两个,因此不符合                Console.ReadKey();          }

  此地要牢记,{}里面的参数不必然要写全三个,也得以独自写三个,那样表示单独相配内定的字符数,举个例子\b{6}\b相配刚刚5个假名的单词。

  {n,}  相配n次或更频繁,  {5,}  相称5次以上

十一、括号以及反向引用

  前边已经说过括号的七个功用:限制多采纳的限制,将若干字符组合为一个单元,受问号或星号之类的量词功用。未来在的话一种括号的用法,分组,此东西有所回想的遵守,即在正则表明式内部如故能够回想上次杰出到的是怎么。这一个事物用语言说不精晓,书本上又是画画又是线的,这里唯有用多个事例:

        static void Main(string[] args)          {              Regex reg = new Regex(@"(\b[A-Za-z]+ +)\1\b");              Console.WriteLine(reg.Match("red color color red"));    //输出 color color                Console.ReadKey();          }

  例子分析:首先说多美滋(Beingmate)下括号里面代表怎么样意思,

  (\b[A-Za-z]+ +)  匹配单词的开始,然后是大小写字母至少1次,然后空格至少1次。说白了就是 空格然后是匹配不区分大小写的一寸字母然后是任意个空格
  
  OK,再来说下\1\b  \b当然就是单词的结尾了,那么\1呢?这个就是分组的作用了,\1代表的就是前面括号里面的东西,也就是一个单词。

  因此,整个正则表达式的意思是,匹配间隔了N个空格的重复的单词。不懂也没办法了。

拾2、奇妙的转义

   \ 转义符它的功效是使元字符失去它的意思,仅仅表示其平凡输入中字符的含义。

   C#例子:

        static void Main(string[] args)          {              Regex reg = new Regex(@".c");              Console.WriteLine(reg.Match("(acdefg"));    //输出 ac                Regex reg2 = new Regex(@"\.c");              Console.WriteLine(reg2.Match("(acdefg"));    //输出 空白(啥都不输出,说明.已失去了它元字符,代表任意字符的意义)                Regex reg3 = new Regex(@"\.c");              Console.WriteLine(reg3.Match("(.cdefg"));    //输出 .c    它字表它自己,就匹配一个点.了                Console.ReadKey();          }

   举例,小编要相称字符 .
字符*  就要求在前头加反斜杠,\.  \*删去它元字符的意义。

   一些索要转义的字符列表    \ * + ? | { [ ( ) ^ $ . # 和
空白

拾三、一些别样的元字符

  \w  相称字母,汉字,数字,下划线

  \W  匹配非字母,非汉字,非数字,非下划线

  \s   相称空白符

  \S  相称非空白符

  \d  相配数字

  \D  匹配非数字

static void Main(string[] args)          {              Regex reg = new Regex(@"\w?");              MatchCollection mcoll = reg.Matches("@你s_5");              foreach (Match mat in mcoll)              {                  Console.WriteLine(mat.Value);   //输出 空白 你 s _ 5     果然是匹配汉字、字母、下划线、数字              }                Regex reg2 = new Regex(@"\s");              MatchCollection mcoll2 = reg2.Matches("abc def");              foreach (Match mat in mcoll2)              {                  Console.WriteLine(mat.Index);   //输出 3    这里要注意一个问题了,在用Matches时,当匹配不到时,会返回Empty,因此,可以认为每次都是匹配到的,但是匹配到空              }                Regex reg3 = new Regex(@"\d");      //匹配数字              Match m2 = reg3.Match("abc5def");              Console.WriteLine(m2.Value);    //输出 5                //以下代码为完全复制上面的代码,只是改了命名与正则              Regex reg4 = new Regex(@"\W?");              MatchCollection mcoll3 = reg4.Matches("@你s_5");              foreach (Match mat in mcoll2)              {                  Console.WriteLine(mat.Value);   //输出 @              }                Regex reg5 = new Regex(@"\S");      //匹配非空格              MatchCollection mcoll4 = reg5.Matches("abc def");              foreach (Match mat in mcoll4)              {                  Console.WriteLine(mat.Value);   //输出 abcdef    这里要注意一个问题了,在用Matches时,当匹配不到时,会返回Empty,因此,可以认为每次都是匹配到的,但是匹配到空              }                Regex reg6 = new Regex(@"\D");      //匹配非数字              Match m3 = reg6.Match("abc5def");              Console.WriteLine(m3.Value);    //输出 a  Match就是只匹配第一个                Console.ReadKey();          }  

  还会有,既然学习了正则表明式,就相对不要忘记那1个用法:

  图片 1

  


 

5.多选结构


5.1
|:元字符,或的意思。依据该字符可以把自由的正则表达式组合成3个总的表达式,并且总表达式可以合营个中的率性子表达式。
例如gr[ea]y能够创作grey|graygr(e|a)y,在那之中括号用来划定多选结构的限量(通常情况下,括号也是元字符
)。

注意:gr[e|a]y不合乎大家的须要,因为在此处|只是二个常常字符。

在这里,gr[ea]ygr(e|a)y表示的意味一样,不要以为多选结构和字符组同样,1个字符组只可以协作指标文本中的单个字符,不过多选结构本人都能够是共同体的正则表达式,都得以协作自便长度的文书。

还恐怕有一点内需留意,正是多选结交涉^$一起利用的时候。
5.2 ^From|Subject|Data:*:相称的是^FromSubjectData:*
5.3
^(From|Subject|Data):*:相称1行的开场地点,然后是FromSubjectData轻便3个,最终相配:*

发表评论

电子邮件地址不会被公开。 必填项已用*标注