正则表达式必知必会 9/10

第四章

使用元字符

验证某个模式能不能获取预期的匹配结果并不困难,但如何验证它不会匹配到你不想要的东西可就没那么简单了。

1.因为元字符在正则表达式里有着特殊的含义,所以这些字符就无法用来代表它们本身。若要匹配自身得进行转义。

2.配对的元字符(比如[或者])不用作元字符时必须被转义,否则正则表达式分析器很可能抛出一个错误。\的匹配表达式,\后面必跟另外一个字符,否则报错。

3.元字符大致可以分为两种,一种是用来匹配文本的(比如.),另外一种是正则表达式的语法所要求的的(比如[和])。

4.空白元字符

  [\b]    回退(并删除) 一个字符(Backspace键) 

  \f     换页符

  \n     换行符

  \r     回车符

  \t     制表符(Tab)

  \v     垂直制表符

5.数字元字符

  \d    任何一个数字字符(等价于[0-9]) 

  \D    任何一个非数字字符(等价于[^0-9])

在于正则表达式打交道的时候,同样的问题几乎总有好几种不同的解决办法。这些办法并无优劣之分,你尽可以选择最熟悉的那种语法。(当然,前提是它们能解决问题)

6.字母数字元字符

  \w    任何一个字母数字字符(大小写均可)或下划线字符(等价于[a-zA-Z0-9])

  \W    任何一个非字母数字字符(大小写均可)或下划线字符(等价于[^a-zA-Z0-9])

7.匹配空白字符(与非空白字符)

  \s    任何一个空白字符(等价于[\f\n\r\t\v])

  \S    任何一个非空白字符(等价于[^\f\n\r\t\v])

8.使用十六进制的数值要用前缀\x来给出。八进制\0

第五章

重复匹配

1.要想匹配同一个字符(或字符集合)的多次重复,只要简单地给这个字符(或字符集合)加上一个+字符作为后缀就可以了。+匹配一个或多个字符(至少一个,不匹配0个字符的情况).还有一个*,区别是*可以没有匹配。

2.在字符集合加上+后缀时,得放在外面。比如说,[0-9]+ 是正确的, [0-9+]则不是,后者的意思是匹配由0到9和+构成的字符集合。

3.+是元字符,如果需要匹配+本身,就必须使用它的转义序列\+。

4.在字符集合中,像.和+这样的元字符将被解释为普通字符,不需要被转义,但转义了也没有坏处。[\w.]的使用效果与[\w\.]是一样的。

5.?只能匹配一个字符(或者字符集合)的零次或一次出现。

6.除了匹配一次或者0次,1次或者多次,还可以设置匹配的重复次数。正则表达式提供了一个设定重复次数(interval)的语法。重复次数要用{和}字符来给出,把数值写在它们之间。

7.除了设置次数外,还可以为重复匹配次数设定一个区间,如{1,3}‘  ’

8. 贪婪型,跟懒惰型的区别

 本来是期望匹配到两个分开的<b>s</b>   <b>s</b>

因为*和+都是所谓的“贪婪型”元字符,他们匹配时的行为模式是多多益善而不是适可而止的。他们会尽可能地从一段文本的开头一直匹配到这段文本的末尾,而不是从开头匹配到碰到第一个匹配为止。

第六章

位置匹配

1.\b单词边界,\b用来匹配一个单词的开始或结尾。

2.\b匹配切只匹配一个位置,不匹配任何字符,\bcat\b匹配到的字符串长度为3个字符(c、a、t),不是五个字符。

3.\b用来匹配一个\W和一个\w之间的,\B相反

比如b - b得用\B来匹配出这个-。

第七章

使用子表达式

1.用来表明重复次数的元字符(如?或*或{2}等)只作用于紧挨它的前一个字符或元字符。这时候就需要子表达式。

2.()为子表达式。

3.子表达式允许嵌套。

第八章

回溯引用:前后一致匹配

1.\1代表模式里的第一个子表达式,为什么需要回溯引用?假如匹配html标签,其中有一个<h1></h2>虽然是错的,但是符合都是数字所以也会被寻找出来。

2.回溯引用匹配通常从1开始计数(\1,\2),在许多的实现里,第0个匹配(\0)可以用来代表整个正则表达式。

3.正则表达式也可以完成各种复杂的替换操作,其中就需要用到回溯引用。javascript中用$替换\。

4.用来进行大小写转换的元字符。

\E     结束\L或者\U转换

\l     把下一个字符转换为小写

\L    把\L到\E之间的字符全部转换为小写

\u    把下一个字符转换为大写

\ U    把\U到\E之间的字符全部转换为大写

第九章

前后查找

1.需求:根据标记匹配文本,对某一个位置的前、后,内容进行查找。

2.正则表达式的术语“消费consume”,用来表述“匹配和返回文本”。如果被匹配的文本不包含在最终返回的匹配结果里,这被称为“不消费”。

3.?= 向前查找,

4.向前查找(向后查找)匹配本身其实是有返回结果的,只是这个结果的字节长度永远是0而已。因此,前后查找操作有时也被称为0宽度(zero-width)匹配操作。

5.?<=向后查找。

6.?!负向前查找,?<!负向后查找 ,即取非。

猜你喜欢

转载自www.cnblogs.com/ljg1998/p/12644005.html