了解正则中的特殊匹配技巧

正则,不一定每个程序员都会使用,正则中的语法也不是每一个人都能非常的了解,每个语言对正则的支持度又是一样的,一般来说正则表达式有POSIX类,PERL类等等。在这里不会把正则的初始教程也写下来,主要为已经会使用正则,需要知道一些技巧的朋友提供一些帮助。在这里主要以python为主,正则大致上都是相同的,所以如果用不了,可以看看所用语言的文档。

首先来说一下正则的一些基础知识:

  1. 正则中的一些特殊字符
    • .
    • 点(又称dot),可以匹配任何一个字符

    • ^
    • 在正则中表示一行字符的开始位置

    • $
    • 在正则中表示一行字符的最后位置

    • *
    • 匹配0或者多个字符。比如ab*,它可以匹配a、ab、a+任意字符、ab+任意字符
    • +
    • 匹配1或者多个字符。还是举ab+,他可以匹配ab、ab+任意字符

    • ?
    • 可以匹配0或者1个字符。

    • {m}
    • 只能匹配指定m数量或之上的字符,例如a{6},只有当aaaaaa才能匹配,缺一个将无法匹配成功

    • {m,n}
    • 可以匹配在m到n范围内数量的字符,a{3,5} 可以匹配从aaa到aaaaaa字符。

    • \
    • 用于字符串的转移,这里面都是些特殊字符,但是我又想要匹配这些特殊字符,这个时候你就需要这个了。

    • [ ]
    • 指定需要匹配的范围内的字符,与上面指定数量是不一样的。 比如需要匹配a-c之间的字符,就可以写成[a-c]。

    • |
    • 或者,这个是在两个范围匹配成,例如 a|e 只有当是a或者e才能成功。

    上面已经把最最常用的特殊字符已经列出来了,我们在记一次 . ^ $ * + ? { } \ [ ] | ( )。如果你要匹配这些特殊字符记得需要加\才行哦。

  2. 一些特殊表达式
    • \A
    • 只匹配标识字符串开始位置

    • \b
    • 匹配空字符串,只能作用于在一个字的开始或者结束位置。假设一个字符后面加了\b,那么这个字符之后如果有其他字符都将不能匹配成功,但是匹配的字串中含有) .却可以的。比如/\bab\b/,可以成功匹配ab、ab. 、(ab),但是无法匹配成功 cab 或者 abd

    • \B
    • 匹配空字符串,但是匹配的条件与\b相反,他只能作用于一个字的非开始或者结束位置。还是拿ab来说,/ab\B/,这时候可以匹配成abd,但是无法匹配成ab.

    • \d
    • 相当于 [0-9] 只能匹配数字

    • \D
    • 相当于[^0-9] 只能匹配非数字的字符
      上面两个在中文情况下会有一些特殊。这个将在以后的文章中具体来说一下

    • \s
    • 匹配任何空白字符。相当于[ \t\n\r\f\v] 空格 换行之类

    • \S
    • 匹配任何非空白字符,相当于[^ \t\n\r\f\v]

    • \w
    • 匹配字母和数字,相当于[0-9A-Za-z_],如果在中文情况下只有0-9能成功,中文字符将失效

    • \W
    • 匹配除字母和数字之外的内容,相当于[^0-9A-Za-z_],这个情况下,中文是可以成功匹配的

    • \Z
    • 只匹配标识字符串尾部位置

    另外在某些语言中还有其他特殊的表达式,比如\v之类的,\r\n是做为换行而存在的,\t是table符,具体可以查看Ascii表。

需要获取数据,我们需要在在正则表达式上加入(),这样才能返回的匹配结果中获得匹配的内容。在这里面有一些方法在平常我们是不太使用的。可能某些语言不支持。

  1. (?Pexp)
  2. 当如此表达的时候,返回的匹配结果将是 { “name” => exp结果 }, 比如 (?[\w+])

  3. (?P=name)
  4. 表示到上面那个表达式终止,这个需要与上面的同时时候才行。

  5. (?:exp)
  6. 这个用处在于配合(exp)匹配指定的内容,这个在严谨的匹配中非常有用,比如 ((?:ac_)[\w+]), 当只有ac_开头的内容才可以匹配,但是我不需要ac_ 这个时候只会得到\w+的内容,比如ac_tv最终只会得到tv的内容。

  7. (?<= exp)
  8. 只匹配exp后面的内容,比如 (?<=abc)def, 这个时候abcdef只会匹配到def

  9. (?=exp)
  10. 只匹配exp前面的内容与上面相反

结合上面这些匹配技巧,你的表达式能最快最直接最精准的获得你所想要的内容。这里只说了一个大概,更多正则需要在操作中不断的尝试才能发现。

Leave a Comment

To create code blocks or other preformatted text, indent by four spaces:

    This will be displayed in a monospaced font. The first four 
    spaces will be stripped off, but all other whitespace
    will be preserved.
    
    Markdown is turned off in code blocks:
     [This is not a link](http://example.com)

To create not a block, but an inline code span, use backticks:

Here is some inline `code`.

For more help see http://daringfireball.net/projects/markdown/syntax

NOTE - You can use these HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

This site uses Akismet to reduce spam. Learn how your comment data is processed.

%d bloggers like this: