正则表达式的使用

来源:互联网 发布:xboxone运行windows 编辑:程序博客网 时间:2024/06/02 22:30

定界符

在程序语言中使用与Perl兼容的正则表达式,通常都需要将模式表达式放入定界符之间,如”/”.

常使用斜线”/”作为定界符,如”/apple/”。用户只要把需要匹配的模式内容放入定界符之间即可。作为定界的字符也不仅仅局限于”/”,除了字母、数字和斜线”\”以外的任何字符都可以作为定界符,像”#”、”|”、”!”等都可以

原子

原子是正则表达式的最基本组成单元,而且在每个模式中最少要包含一个原子。原子是由所有那些未显示指定为元字符的打印和非打印字符组成,具体分为5类。

  1. 普通字符作为原子:如a~z、A~Z、0~9 等

  2. 一些特殊字符和转义后原子符作为原子:

    所有标点符号,但语句特殊意义的符号需要转义后才可作为原子,如:\” \’ \ * \ + \ ? \ . 等

  3. 一些非打印字符作为原子:如\f \n \r \t \v \cx

    常用的非打印字符

  4. 使用”通用字符类型”作为原子:如 \d \D \w \W \s \S

    常用的通用字符

  5. 自定义原子表([]):如 ‘/[apj]sp/’ ‘/[\^apj]sp/’

元字符

字符串边界限制

在某些情况下,需要对匹配范围进行限定,以获得更准确的匹配结果。”^”和”$”分别指字符串的开始和结束

例如在字符串”Tom and Jerry chased each other in the house until Tom’s uncle come in” 中元字符”^” 或 “\A” 置于字符串的开始确保模式匹配出现在字符串的首端:/^Tom/

元字符”$” 或 “\Z” 置于字符串的结束,确保模式匹配出现在字符串的尾端。/in$/

如果不加边界限制元字符,将获得更多的匹配结果。

/^Tom$/ 精确匹配 /Tom/ 模糊匹配

单词串边界限制

在使用各种编辑软件的查找功能时,可以通过选择”按单词查找”获得更准确的结果。正则表达式中也提供类似的 功能。

例如:在字符串”This island is a beautiful land”中

  • 元字符”\b”对单词边界进行匹配:
    • /\bis\b/ 匹配单词 “is”,不匹配”This” 和 “island”。
    • /\bis/匹配”is” 和 “island” 中的 “is” ,不匹配 “This”.
  • 元字符”\B” 对单词边界以外的部分进行匹配:
    • /\Bis\B/将明确的指示不予单词的左、右边界匹配,只匹配单词的内部。所以在这个例子中没有结果。
    • /\Bis/匹配 “This” 中的 “is”

重复匹配

正则表达式中有一些用于重复匹配某些原子的元字符: “?”、”*”、”+”。

  • 元字符 “?” 表示0次或1次匹配紧接在其前的原子。

    例如: /colou?r 匹配 colour 或 color

  • 元字符 “*” 表示0次、1次或多次匹配紧接在其前的原子。

    例如:/zo*/ 匹配 z、zoo

  • 元字符 “+” 表示1次或多次匹配紧接在其前的原子。

    例如:/go+gle/ 匹配 “gogle”、”google”或 “gooogle” 等中间含有多个o的字符串。

  • 元字符 “{}” 准确的指定原子重复的次数, “{m}”表示其前的原子恰好出现m次。”{m, n}” 表示其前原子至少出现m次,至多出现n次。 “{m, }” 表示其前原子出现不少于m次。

    例如 /zo{1, 3}m/ 只能匹配字符串 “zom” “zoom” “zooom”。

任何一个字符

  • 元字符 “.” 匹配除换行符外任何一个字符。

    相当于:[\^\n] (Unix系统)或[\^\r\n](Windows系统)

    例如:/pr.y/可以匹配的字符串 “prey”、”pray”或”pr%y”等。

  • 可以使用 “.*” 匹配除了换行符以外的任何字符。

    例如 /^a.*z$/可以匹配以a开头,z结束的任意不包括换行符的字符串。

    /.+/也可以完成类似的匹配,不同的是至少要匹配一个字符。

原子表

  • 原子表 “[]” 中存放一组原子,彼此地位平等,且仅匹配其中的一个原子。如果想匹配一个 “a” 或 “e” 使用 [ae]。

  • 原子表 “[^]” 或者称为排除原子表,匹配除表内原子外的任意一个字符。

    例如:/p[ ^u] 匹配 “part” 中的 “pa” 但无法匹配 “computer” 中的 “pu” 因为 “u” 在匹配中被排除。

  • 原子表 “[-]” 用于连接一组按ASCII顺序排列的原子,简化书写。

    例如 /x[123456789]/可以写成x[0-9],用来匹配一个由 “x” 字母与一个数字组成的字符串;

    /< [A-Za-z][A-Za-z0-9]*/?>/ 可以匹配

模式选择符

  • 元字符 “|” 又称模式选择符,在正则表达式中匹配两个或更多的选择之一

    例如 \bapple|pear\b可以匹配 There are many apple and pear中的apple 和pear

模式单元

  • 元字符 “()” 将其中的正则表达式变为原子(或称模式单元)使用,与数学表达式中的括号类似,”()” 可以做为一个单元被单独使用。

    例如 /Hello (World)|(Earth)/ 可以匹配 “Hello World” 或 “Hello Earth”

重新使用单元

  • 系统自动将模式单元 “()” 中的匹配依次存储起来,在需要时可以用 “\1”、”\2”、”\3”的形式进行引用。当正则表达式包含有相同的模式单元时,这种方法非常便于对其进行管理。注意使用时需要写成 “\\1”、”\\2”

    例如:\d{4}([\W])\d{2}\1\d{2} 可以匹配 2012-03-25 或者 2012/03/25 但不会匹配 2012-03/25

  • 当不需要存储匹配结果时使用非存储模式单元 “(?:)”

    例如 /(?:a|b|c)(D|E|F)\\1g/ 将匹配 “aEEg” 在一些正则表达式中,使用非存储模式单元是有必要的。否则,需要改变其后引用的顺序。上例还可以写成 /(a|b|c)(C|E|F)\\2g/。

模式修正符

模式修正符

0 0
原创粉丝点击