主页spacer>软件支援>spacer免费的正则表达式测试工具

spacer

轻松学习和测试正则表达式

Mergemill Pro 的正则表达式实验室是一个免费的测试工具,让你学习创建和测试功能强大的正则表达式

Share via Email Email

print friendly Print / PDF

Share on Facebook Facebook

Share on Twitter Twitter

space
正则表达式,或 regex,是一个由普通字符和元字符组成的文本模式,共同描述在查找和替换文本时要匹配的字符串。用正则表达式,你可快速查找特定的字符或位置。

本简介是 Mergemill Pro 之内 Xojo 正则表达式的特定实现。然而,以下大多数的思路和语法也应适用于其他正则表达式的实现。

为使你可以轻松地测试和调试正则表达式,Mergemill Pro 提供了「正则表达式实验室」。如果你不熟悉正则表达式,最好的开始是按照这个介绍,尝试在「正则表达式实验室」创建或测试他人提供的正则表达式。因你可以没有任何限制地在 Mergemill Pro 试用版内使用正则表达式实验室,这基本上使此软件成为免费的正则表达式测试工具。


基本正则表达式模式

模式

说明

abc

按序匹配所有的 a,b 和 c。例如,正则表达式 "123" 匹配 "01123345"。

a|b|c

匹配 a,b,或 c。例如,正则表达式 "1|2|3" 匹配 "01123345"。

[a-z0-9]

匹配方括号中的任何单个字符。例子:[aeiou] 匹配任何一个元音。[a-zA-Z0-9] 匹配任何字母数字字符。[a-e] 匹配任何 a 至 e 范围内的字符。如要匹配一个 "﹣",可将它放置于字符集的开头或结尾。例如,[a-c-] 会匹配任何 a 至 c 范围内的字符或 "﹣" 号。其他有用的模式包括:"[[]" 可匹配 "["。"[]]" 匹配 "]"。

[^a-z0-9]

匹配不在集内的任何单个字符。例如,[^aeiou] 匹配元音以外的任何字符。如要匹配脱字符,可将它放置于方括号内首个位置以外的任何地方。例如,[a-e^] 会匹配任何 a 至 e 范围内的字符或脱字符。

\d

匹配一个数字,作用如 [0-9]。

\D

匹配一个非数字,作用如 [^0-9]。

\w

匹配一个字母或数字字符,作用如 [a-zA-Z0-9_]。

\W

匹配一个非字母及非数字字符,作用如 [^a-zA-Z0-9_]。

\s

匹配一个空白字符(空格,制表符,回车,换行,换页)。

\S

匹配一个非空白字符。请注意:[\D\S] 与 [^\d\s] 作用并不一样。事实上,[\D\S] 匹配任何东西。

\n

匹配一个换行符。

\r

匹配一个回车符。

\t

匹配一个制表符。

\f

匹配一个换页符。

\0

匹配一个空字符。

\000

也匹配一个空字符。这是 \nnn 的一个特定情况。

\nnn

匹配 ASCII 字符的八进制值 nnn。例如,"\15" 与 "\r" 的作用是相同的。

\xnn

匹配 ASCII 字符的十六进制值 nn。所以,另一种方式去匹配回车符是使用 \xD。

\cX

匹配一个 ASCII 控制字符。反斜杠后首个字母必须是一个小写的 c。第二个字母是大写字母 A 到 Z,表明 Control+A 到 Control+Z。与此模式有相同作用的是 \x01 到 \x1A。

\元字符

匹配一个元字符,例如 \., \\, 及 \|。

. (点)

除换行符以外,匹配任何字符。如果单独使用「点」,你会先匹配目标字符串的第一个字符,如再重复查找,便会匹配每一个后续的字符,直到遇到一个换行符。例如,"5.." 匹配 "0123456789"。「点」在 Unix 即为 [^\n],在 Windows 是 [^\r\n],在 Mac OS 是 [^\r]。如果可以的话不要使用点,如果你更清楚指明要匹配的字符串,你的正则表达式是更有效的。优化一个正则表达式是非常重要的,尤其是它是被多次使用在大量的数据中。


字符集内的元字符

在字符集内,除右括号 "]",反斜杠 "\",脱字符 "^",和 连字符 "-" 外,其他的元字符可以普通字符看待,不需要通过反斜杠转义。例如要匹配 "*" 或 "+",只需使用 [+*]。但要于没有任何特殊含义的字符集内包括一个反斜杠字符,你必须添加另一个反斜杠将其转义。所以 [\\x] 匹配一个反斜杠或 x。右括号 "]",脱字符 "^" 和连字符 "-" 可以反斜杠转义,或将其放置在字符集内一个不涉及其特殊意义位置。


锚(位置匹配)

字符

说明

^

匹配行或字符串的开头。例如,"^名称" 匹配以 "名称" 开头的行。

$

匹配行或字符串的结尾。例如,".$" 匹配在一行的最后一个字符。

\b

匹配一个单词边界。例如,"\bword\b" 查找整个词。

\B

匹配非单词边界。它匹配 \b 不匹配的。


重复

字符

说明

x?

将 x 重复零次或一次。也就是说,在被匹配的字符串内 x 是可选的。例如,"12?3" 同时匹配 "0123456789" 和 "013456789"。

x*

在被匹配的字符串内,x 可重复零次或多次。例如,"12*" 匹配 "01222223456789"。

x+

在被匹配的字符串内,x 可重复一次或多次。例如,[0-9]+ 查找字符串内一个或多个连续的数字,如 "32" 中的 "Win32"。

x{m,n}

在被匹配的字符串内,x 可重复 m 至 n 次。

x{n}

在被匹配的字符串内,x 重复 n 次。

x{n,}

在被匹配的字符串内,x 重复最少 n 次。


「贪婪」选项

Mergemill Pro 的正则表达式重复操作符并不「贪婪」。贪婪操作符重复前面的符记,直至匹配失败。因此,在正则表达式 "<.+>" 的 "+" 若是贪婪的,它会由最左位置的 "<" 开始,一直匹配所有字符,直至文本最后一个 ">"。 如果你想找到一个 HTML 文档中的第一个标签,这是没有帮助的。

Mergemill Pro 可让你通过一个复选框控制正则表达式的贪婪属性。你也可在 "*" 或 "+" 后放置一个 "?",以扭转「贪婪」设定。因此,当应用到 "aaaa" 时,"a+?" 传回 "a" 而 "a+" 则传回 "aaaa"。


分组和反向引用

你可将一个正则表达式的一部分放在括号内,以作一组字符处理。这让你可以将一个正则表达式的重复操作符应用于整组字符。例如,"Nov(ember)?" 会同时匹配 "Nov" 及 "November"。

圆括号除了将正则表达式的一部分指定为一组,还创建了一个「反向引用」。反向引用存储 regex 括号内字符串匹配的文本部分。然后,你可经 \1, \2, 等引用第一组匹配、第二组匹配等。例如,"\b(\w+)\s+\1\b" 会发现如 "the the" 等的双字。如果你想匹配任何日期,可使用 "(\d+)\s(B.C.|A.D.|BC|AD)",则 \1 只指年数而 \2 将包含字母。

请注意:

  1. 反向引用仅存储最后一个匹配,所以 "([abc]+)" 捕获 "cab",而 "([abc])+" 只获 "b"。
  2. 圆括号和反向引用如 \1 于方括号内 [ ] 内没有特殊的含义。
  3. 在查找模式的反向引用必须使用反斜杠,如 \1,\2,等。在替换模式,你可以使用 \1 或 $1,等等。


替代模式

模式

说明

$'

替换匹配文本后的整个目标字符串。

$&

与 \0 或 $0 一样,它包含整个匹配的字符串。例如,若 "\d\d\d\d\sB\.C\." 捕获 "1541 B.C.",则替换模式 "the year $&" 便传回结果 "the year 1541 B.C."。

$0-$50

与 \0 至 \50 一样。如没有相应编号的子表达式,结果便会是空白,否则它们会含有通过查找模式中括号内容最后匹配的结果。

\xnn

替换成 nn 十六进制表示的字符。

\nnn

替换成 nnn 八进制表示的字符。

\cX

替换成控制-X 字符。


扩展机制

模式

说明

(?#text)

使用此模式插入注释。

(?:regex)

这个分组不会创建反向引用,因此被调用时会传回空白。

(?=regex)

这是一个零宽度正预测先行断言。例如,\w+(?=\t) 匹配一个制表符之前的一个字,而不包括该制表符在 $& 之内。

(?!regex)

这是一个零宽度负预测先行断言。例如,foo(?!bar) 匹配任何不在 "bar" 之前的 "foo"。

(?<=regex)

这是一个零宽度正回顾后发断言。例如,(?<=\t)\w+ 匹配一个制表符之后的一个字,而不包括该制表符在 $& 之内。它仅适用于固定宽度的回顾后发正则表达式。

(?<!regex)

这是一个零宽度负回顾后发断言。它仅适用于固定宽度的回顾后发正则表达式。例如,"\b\w+(?<!s)\b" 匹配一个不以 "s" 完结的字。如不使用回顾后发,同样效果的正则表达式便是 \b\w*[^s\W]\b。

请注意:

  1. 环视是零宽度,即只要条件得到满足,正则表达式引擎便会忘记环视内的一切。因此,它不创建反向引用,并且不包括在反向引用编号的计数。
  2. 预测先行可使用任何有效的正则表达式,如 (?=regex) 或 (?=(regex))。若它包含了第二个捕获括号如 (?=(regex)),反向引用将被存储。例如:"(?=(\d+))\w+\1" 不匹配 123x12,但将匹配 456x56 内的 56x56。


Mergemill Pro 的正则表达式选项

「单行」忽略内部的换行符以便匹配 "^" 和 "$"。
「大小写敏感」指定在匹配一个字符串时是否必须考虑到大小写。
「小数点全匹配」设定点匹配一切,包括通常不匹配的换行符。

spacer

返回页首

软件功能spacer::spacer下载专区spacer::spacer购买spacer::spacer软件支援spacer::spacer视频教程spacer::spacer标签指南spacer::spacer网站导览


版权所有 · 不得转载 © 2001-2017 Cross Culture Ltd.