正则表达式 学习笔记(三)
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,则首先被捕获的是一个空字符串。

总结:
- 字符:
abcd1234etc. - 字符类:
.[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\3etc. (在匹配表达式和替换表达式中都可用)
- 元字符:
.\[]{}?*+|()^$ - 在字符类中使用元字符:
[]\-^ - 使用反斜杠可以忽略元字符:
\

浙公网安备 33010602011771号