正则表达式语法

28 篇文章 13 订阅

正则表达式语法

正则表达式语言基于 Perl 正则表达式语法。

文字

所有字符都是文字除了: ., *, ?, +, (, ), {,}, [, ], ^, $\。这些字符代表文字当之前有一个 \ 时。一个文字是一个与它自己相匹配的字符。例如,搜索 \? 会匹配每一个在文档中的 ? ,或搜索 Hello 会匹配每一个在文档中的 Hello

元字符

下列表格包含元字符(非文字)的完整列表以及这些元字符在正则表达式中的行为。

\把下一个字符标记为一个特殊字符,一个文字,或一个向后引用。例如,‘n’ 与字符 “n” 相匹配。而 ‘\n’ 代表一个换行符号。序列 ‘\’ 代表 “”,"(" 则与 “(” 相匹配。
^匹配输入字符串的开始位置。例如,"^e" 表示任何由 “e” 开头的字符串。
$匹配输入字符串的结尾位置。例如,“e$” 表示任何由 “e” 结尾的字符串。
*匹配之前的字符或子表达式零次或多次。例如,zo* 会匹配 “z” 以及 “zoo”。* 等同于 {0,}。
+匹配之前的字符或子表达式一次或多次。例如,‘zo+’ 匹配 “zo” 以及 “zoo”,但不匹配 “z”。 + 等同于 {1,}。
?匹配之前的字符或子表达式零次或一次。例如,“do(es)?” 匹配 “do” 在 “do” 或 “does” 中。? 等同于 {0,1}。
{n}n 是一个非负整数。匹配确定的 n 次。例如,‘o{2}’ 不匹配 “Bob” 中的 “o”,但与 “food” 中的两个 o 匹配。
{n,}n 是一个非负整数。匹配至少 n 次。例如,‘o{2,}’ 不匹配 “Bob” 中的 “o”,单匹配 “foooood” 中的所有 o。and matches all the o’s in “foooood”. “o{1,}” 等同于 ‘o+’。 ‘o{0,}’ 等同与 ‘o*’。
{n,m}m 和 n 都要是非负整数,n <= m。匹配至少 n 次,最多 m 次。例如,“o{1,3}” 与 "fooooood"中的前三个 o 向匹配。 ‘o{0,1}’ 等同于 ‘o?’。要注意的是你不能在逗号与数字之间加一个空格。
?当这个字符紧跟着任何其他数量词 (*, +, ?, {n}, {n,}, {n,m}) 时,匹配的模式是非贪婪。一个非贪婪模式尽可能少地与搜索字符串匹配,而默认的贪婪模式则尽可能多地与搜索字符串匹配。例如,字符串 “oooo”,‘o+?’ 匹配单一的一个 “o”,而w ‘o+’ 匹配所有 ‘o’。
.与任何单一字符串匹配。例如,".e" 匹配任何在 “e” 之前的文字,如 “he”,“we”,或 “me”。 在 EmEditor Professional 中,它匹配搜索正则表达式的附近行文本框中指定范围内的换行当正则表达式 “.” 匹配换行符复选框被勾选。
(pattern)括号有两个作用: 把一个格式组合到一个子表达式中,以及捕捉生成该匹配的格式。例如,表达式 “(ab)*” 匹配所有字符串 “ababab”。每一个子表达式的匹配被捕捉为一个从左到右编号的向后引用(如下)。要匹配括号字符,用 ‘(’ 或 ‘)’。
\1 - \9指定一个向后引用 - 一个向后引用是上一个被匹配的子表达式的引用。引用的内容是与子表达式相匹配的内容,而不是表达式本身。一个向后引用由转义符 “” 加一个 “1” 到 “9” 的数字组成。"\1" 指的是第一个子表达式,"\2" 是第 2 个,以此类推。例如,"(a)\1" 会捕捉 “a” 为第一个向后引用,并匹配任何 “aa” 文本。你还可以使用向后引用功能当你在搜索菜单下选择替换功能时。用正则表达式来定位一个文本格式,与之相匹配的文本能被一个指定的向后引用替换。例如,"(h)(e)" 的表达式会在文本中查找 “he”,把 “\1” 放在替换为文本框中会用 “h” 取代 “he”, 而如果是 “\2\1” 的话,则会用 “eh” 取代 “he” 。
(?:pattern)一个与格式相匹配,但不捕获该匹配的子表达式,这是一个不能用向后引用来存储的非捕获匹配。这个表达式通常和 “or” 字符 (|) 组合使用。例如,'industr(?:y|ies) 是一个比 ‘industry|industries’ 更实用的表达式。
(?=pattern)子表达式执行匹配 lookahead 搜索,查找任何后面跟着符合的模式的字符串。例如,“x(?=abc)” 与 "x"相匹配仅当字符串后面跟着 “abc” 表达式时。 这是一个不能用向后引用来存储的非捕获匹配。模式不包含换行。
(?!pattern)子表达式执行非匹配 lookahead 搜索,查找任何后面没有跟着符合的模式的字符串。例如,“x(?!abc)” 与 “x” 相匹配只有当该字符串后面不跟着 “abc” 表达式时。这是一个不能用向后引用来存储的非捕获匹配。模式不包含换行。
(?<=pattern)子表达式执行匹配 lookbehind 搜索,查找任何前面是符合的模式的字符串。例如,"(?<=abc)x" 匹配一个 “x” 只有当它前面有表达式 "abc"时。这是一个不能用向后引用来存储的非捕获匹配。模式不包含换行。模式必须是固定长度。
(?<!pattern)子表达式执行非匹配 lookbehind 搜索,查找任何前面不是符合模式的字符串。例如,"(?<!abc)x" 匹配 “x” 只有当它前面不跟着 “abc” 表达式时。这是一个不能用向后引用来存储的非捕获匹配。模式不包含换行。模式必须是固定长度。
x|y与 x 或 y 向匹配。例如,‘z|food’ 与 “z” 或 “food” 匹配。’(z|f)ood’ 与 “zood” 或 “food” 匹配。
[xyz]字符集。匹配任何在括号内的字符。例如,’[abc]’ 与 “plain” 中的 ‘a’ 相匹配。
[^xyz]负字符集。匹配任何不在括号内的字符。例如,[^abc]’ 与 “plain” 中的 ‘p’ 相匹配。
[a-z]字符范围。与任何指定范围的字符相匹配。例如,’[a-z]’ 与任何 ‘a’ 到 ‘z’ 的小写字母相匹配。
[^a-z]负字符范围。与任何不在指定范围内的字符相匹配。例如,’[a-z]’ 与任何不在 ‘a’ 到 ‘z’ 范围内的字符相匹配。

字符类

下面的字符类被用在字符集中,例如 “[:classname:]”。例如,"[[:space:]]" 是所有空白字符的集合。

alnum任何语言字符及数字: 字母,音节或表意字符。
alpha任何语言字符: 字母,音节或表意字符。
blank任何空白字符,空格或 tab。
cntrl任何控制字符。
digit任何 0-9 的数字。
graph任何图形字符。
lower任何 a-z 的小写字符,以及其他小写字符。
print任何可打印的字符。
punct任何标点字符。
space任何空白字符。
upper任何 A-Z 的大写字母,以及其他大写字符。
xdigit任何十六进制数字字符,0-9,a-f 还有 A-F。
word任何单词字符 - 所有字母数字字符以及下划线。
unicode任何大于 255 代码的字符。

单一字符转义序列

下列转义序列是单一字符的别名:

0x07\a响铃字符。
0x0C\f换页 (FF)。
0x0A\n换行字符。
0x0D\r回车符。
0x09\tTab 字符。
0x0B\v垂直 tab。
0x1B\eASCII 转义符。
0dd\0dd八进制字符代码,dd 是一个或多个八进制数字。
0xXX\xXX一个十六进制字符代码,XX 是一个或多个十六进制数字 (一个 Unicode 字符)。
0xXXXX\x{XXXX}一个十六进制字符代码,XXXX 是一个或多个十六进制数字 (一个 Unicode 字符)。
Z-’@’\cZ Z-’@’一个 ASCII 转义序列控制-Z,其中 Z 是任一 ASCII 字符大于或等于 ‘@’ 的字符代码。

单词边界

下列转义序列与单词的边界相匹配:

<匹配一个单词的开头。(仅限 Boost.Regex)
>匹配一个单词的结尾。(仅限 Boost.Regex)
\b匹配单词的边界(一个单词的开头或结尾)。
\B仅当不在单词边界处时匹配。

字符类的转义序列

下列转义序列能被用来表示整个字符类:

\w任何单词字符 - 所有字母数字字符加下划线。
\W\w 的补集 - 查找任何非单词的字符。
\s任何空白字符。
\S\s 的补集。
\d任何 0-9 的数字。
\D\d 的补集。
\l任何 a-z 的小写字符。
\L\l 的补集。
\u任何 A-Z 的大写字符。
\U\u 补集。
\C任何单一字符,等同与 ‘.’。
\Q开始引述运算符,任何跟在该符号后面的内容会被作为一个文本字符直到找到 \E 结束引述运算符。
\E结束引述运算符,终止一个由 \Q 开始的序列。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值