正则表达式 学习笔记(三)
11.分组
你可以使用括号表示分组:
- 通过使用 Mon|Tues|Wednes|Thurs|Fri|Satur|Sun)day 匹配一周中的某一天
- (\w*)ility 与 \w*ility 相同。都是匹配一个由”ility”结尾的单词。稍后我们会讲解,为何第一种方法更加有用。
- 表示匹配一对括号。
- [()]表示匹配任意一个左括号或者一个右括号
- (red|blue)表示匹配red或者blue或者是一个空字符串
- abc()def与abcdef相同
- (red|blue)?与(red|blue|)相同
- \w+(\s+\w+)表示匹配一个或多个由空格分隔的单词
示例
\w+\W+\w+\W+\w+ = \w+(\W+\w+){2}
\w+\W+\w+\W+\w+\W+\w+\W+\w+\W+\w+ =
\w+(\W+\w+){5}
12.单词分隔符
- \b表示匹配一个单词分隔符
- \b\w\w\w\b表示匹配一个三字母单词
- a\ba表示匹配两个a中间有一个单词分隔符。这个正则表达式永远不会有匹配的字符,无论输入怎样的文本示例
13.换行符
一篇文本中可以有一行或多行,行与行之间由换行符分隔,比如
LINE一行文字
LINE BREAK 换行符
LINE一行文字
LINE BREAK 换行符
...
LINE一行文字
LINE BREAK 换行符
注意,所有的文本都是以一行结束的,而不是以换行符结束。但是,任意一行都可能为空,包括最后一行。行的起始位置,是在换行符和下一行首字符之间的空间。考虑到单词分隔符,文本的起始位置也可以当做是首行位置。最后一行是最后一行的尾字符和换行符之间的空间。考虑到单词分隔符,文本的结束也可以认为是行的结束。基于此概念:
- ^表示匹配行的开始位置
- $表示匹配行的结束位置
- ^&表示一个空行
^.*&
表示匹配全文内容,因为行的开始符号也是一个字符,"."会匹配这个符号。找到单独的一行,可以使用
^.*?$- \^\$表示匹配字符串“^$”
- [$]表示匹配一个$。但是,[^]不是合法的正则表达式。记住在方括号中,字符有不同的特殊含义。要想在方括号内匹配^,必须用[\^]
14.文本分界
在很多的正则表达式实现中,将^和$作为文本的开始符号和结束符号。
还有一些实现中,用\A和\z作为文本的开始和结束符号。
15.捕获组
正则表达式(\w*)ility表示匹配以ility结尾的词。第一个被捕获的部分是由\w*控制的。比如,输入的文本内容中有单词accessibility,那么首先被捕获的部分是accessib。如果输入的文本中有单独的ility,则首先被捕获的是一个空字符串。
总结:
- 字符:
a
b
c
d
1
2
3
4
etc. - 字符类:
.
[abc]
[a-z]
\d
\w
\s
.
代表任何字符\d
表示
“数字”\w
表示”字母”,[0-9A-Za-z_]
\s
表示 “空格, 制表符,回车或换行符”- 否定字符类:
[^abc]
\D
\W
\S
- 重复:
{4}
{3,16}
{1,}
?
*
+
?
表示 “零次或一次”*
表示 “大于零次”+
表示 “一次或一次以上”- 如果不加上?,所有的重复都是最长匹配的(贪婪)
- 分组:
(Septem|Octo|Novem|Decem)ber
- 词,行以及文本的分隔:
\b
^
$
\A
\z
- 转义字符:
\1
\2
\3
etc. (在匹配表达式和替换表达式中都可用)
- 元字符:
.
\
[
]
{
}
?
*
+
|
(
)
^
$
- 在字符类中使用元字符:
[
]
\
-
^
- 使用反斜杠可以忽略元字符:
\