正则表达式 学习笔记(三)
2016-06-24 21:30
183 查看
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中间有一个单词分隔符。这个正则表达式永远不会有匹配的字符,无论输入怎样的文本示例
![](https://images2015.cnblogs.com/blog/552396/201606/552396-20160624205640391-592816664.png)
13.换行符
一篇文本中可以有一行或多行,行与行之间由换行符分隔,比如LINE一行文字
LINE BREAK 换行符
LINE一行文字
LINE BREAK 换行符
...
LINE一行文字
LINE BREAK 换行符
注意,所有的文本都是以一行结束的,而不是以换行符结束。但是,任意一行都可能为空,包括最后一行。行的起始位置,是在换行符和下一行首字符之间的空间。考虑到单词分隔符,文本的起始位置也可以当做是首行位置。最后一行是最后一行的尾字符和换行符之间的空间。考虑到单词分隔符,文本的结束也可以认为是行的结束。基于此概念:
^表示匹配行的开始位置
$表示匹配行的结束位置
^&表示一个空行
^.*&
表示匹配全文内容,因为行的开始符号也是一个字符,"."会匹配这个符号。找到单独的一行,可以使用^.*?$
\^\$表示匹配字符串“^$”
[$]表示匹配一个$。但是,[^]不是合法的正则表达式。记住在方括号中,字符有不同的特殊含义。要想在方括号内匹配^,必须用[\^]
14.文本分界
在很多的正则表达式实现中,将^和$作为文本的开始符号和结束符号。还有一些实现中,用\A和\z作为文本的开始和结束符号。
15.捕获组
正则表达式(\w*)ility表示匹配以ility结尾的词。第一个被捕获的部分是由\w*控制的。比如,输入的文本内容中有单词accessibility,那么首先被捕获的部分是accessib。如果输入的文本中有单独的ility,则首先被捕获的是一个空字符串。![](https://images2015.cnblogs.com/blog/552396/201606/552396-20160624211506563-721280901.png)
总结:
字符:
a
b
c
d
1
2
3
4etc.
字符类:
.
[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. (在匹配表达式和替换表达式中都可用)
元字符:
.
\
[
]
{
}
?
*
+
|
(
)
^
$
在字符类中使用元字符:
[
]
\
-
^
使用反斜杠可以忽略元字符:
\
相关文章推荐
- 提交代码至coding.net
- 拥塞控制域流量控制
- 备用交换机_cogs8_割点
- Android二维码扫描开发(一):实现思路与原理
- pthread入门
- JAVA中this用法小结
- KVC KVO 监听
- 【一天一道LeetCode】#99. Recover Binary Search Tree
- 【一天一道LeetCode】#99. Recover Binary Search Tree
- jdbc使用 Statement 接口实现删除数据操作
- 轻松搞定java内存模型(五)常用命令jps
- 剑指offer36--二叉树的深度
- php 变量与类型相关扩展——类/对象
- 也许是最简洁好用的timeago.js库了
- 動態修改 XML 欄位
- 做敏捷估算,请忘掉人/天
- 带缓存和不带缓存的区别
- 使用Vivado将bit文件下载到Target Device是出错
- 导航表单改进版
- Hash表和Hash冲突