[正则表达式]-基础语法四 元字符优先级

来源:互联网 发布:淘宝店卖假货会怎么样 编辑:程序博客网 时间:2024/06/04 23:26

         在编程语言中,书本上往往爱考运算符优先级,动辄一串表达式十几个不同的运算符,难记难看。的确,优先级很重要,但是笔者总是爱使用()括号来进行限制,改变优先级,使视觉上更好的理解,这可能是比较下乘的武功吧。

      而在正则表达式中,运算符或者更准确的说是元字符或者说是需要区分优先级的元字符,只有寥寥几个。所以,学习优先级,告别使用()括号是有必要的。

     正则表达式运算符优先级\转义符                                     (优先级最高) ()(?:)(?=)(?!)[]                                                                 圆括号和方括号      *+?{n}{n,}{n,m}                                                                            限定符 ^$\任何元字符                                                            定位点和序列| 替换、“或”操作。字符具有高于或操作的优先级,使得z|food可以匹配z或者food。如果要匹配zood或food的要使用正则表达  式(z|f)ood  (优先级最低)
      补充一句优先级可以使用括号来改变,除了\,如果遇到形如\(的正则表达式,就要先考虑转义了。因为\的优先级是正则表达式元字符中最高的,其次才是()括号。

      这里特别要注意到是:“或”操作元字符 | 的优先级最低,如果遇到形如^z|food$的形式它可以匹配的是“行开头z”或者是“food行结尾” 因为^和$的优先级比 | 要高,优先运算它们两个,按照正常的需求与逻辑,应该是^(z|food)$ 。

      如图:

      

.

       所以在使用“或”操作 | 时,一定要注意它优先级最低这一事实。

       在同一优先级中,运算顺序是从左到右的。譬如:

       ^a\d{2,3}$

      优先级最高的是\d和a,随后是{2,3},最后是^ 和$  。注意:单个字符拥有和\一样的优先级。

      在分析正则表达式的时候,往往的依据是“或”操作  | 。依据 | 将表达式分解成几部分。

      譬如:正则表达式22[0-3]|2[0-1][0-9]|1[0-9]{2}|[1-9][0-9]?|0     (请关注|的左侧优先性)

      我们依据“或”运算 | 将这个表达式分为五部分,分别是22[0-3]2[0-1][0-9]1[0-9]{2}[1-9][0-9]?0我们逐个分析。

     22[0-3]  匹配220到223

      2[0-1][0-9]  匹配200到219

      1[0-9]{2}   匹配100到199

      [1-9][0-9]? 匹配1到99

      0   匹配0

      综合起来就是从0到223的数字集合。所以,分析正则表达式要以|入手

0 0
原创粉丝点击