正则表达式学习
2016-04-21 20:39
232 查看
正则表达式:使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串。在文本编辑中,它可以用来检索、替换某个匹配的文本。
正则表达式可以用形式化语言理论的方式进行表述。它右常量和算子组成,分别表示指示字符串的集合和在这些集合上的运算。具体如下:
1) 空集:φ指示集合φ。
2) 空串:ε指示集合{ε}
3) 文字字符:在∑中的a指示集合{a}
相关运算如下:
1) 串接:RS指示集合。如:{“ab”, “c”}{“d”,”ef”}= {“abd”, “abef”, “cd”, “cef”}。
2) 选择:R|S指示R和S的并集。如:{“ab”, “c”}|{“d”,”ef”}= {“ab”, “ef”, “c”, “d”}。
3) 星号*:R*指示包含ε并且闭合在字符串串接下的R的最小超集。可以通过R中的零或多个字符串的串接得到所有字符串的集合。如{“ab”, “c”}* = {ε, “ab”, “c”, “abab”, “abc”, “cba”, “cc”, “ababab”, …}。
它们之间存在优先级,*具有最高优先级,接着是串接,然后是并集。从而可以省略括号。如(ab)c可以谢伟abc,而a|(b(c*))可以写成a|bc*。
一个正则表达式通常被称为一个模式,用来描述或者匹配一系列匹配某个句法规则的字符串。其表示式的形式结果基本如下:
1) 选择:
|竖直分隔符代表选择。如”gray|grey“可以匹配gray和grey。
2) 数量:
某个字符后的数量限定符用来限制前面这个字符允许出现的个数。
+加号代表前面的字符必须至少出现一次(1次或多次)。
?问号代表前面的字符最多只可以出现一次。(0次或1次)。
*星号代表前面的字符可以不出现,也可以出现一次或者多次(0次或1次或多次)。
3)匹配:
圆括号可以用来定义操作符的范围和优先度。如”gr(a|e)y”等价于”gray|grey”,”(grand)?father”匹配father和grandfather。一些结构可以自由组合,可能不同的规则,但是结果相同。如”H(ae?|c)ndel”与“H(a|ae|c)ndel是相同的。
正则表达式优先级:
最高:\;
高:()、(?: )、(?= )、[]
中:*、+、?、{n}、{n,}、{m, n}
低:^、$、中介字符
最低:|
常用正则表达式表:
正则表达式应用:
数据验证:可以检查输入的字符串,看其是否符合某种格式;
查找子串:可以查找文档内(或一个字符串内)符合指定模式的子串;
替换文本:可以使用正则表达式来识别文档中的特定内容,完全删除该部分内容或者用其他字符串来替换它;
使用工具:Word、Notepad++、EditPlus等文字编辑器中的查找功能都支持正则表达式,用正则表达式可以实现更加多样化的查找。VS、CodeBlock、Eclipse、Intellij Idea等开发工具的IDE的查找替换功能也都支持正则表达式,用它可以修改变量名,调整代码格式,统计代码行数。
参考文献:
https://zh.wikipedia.org/wiki/%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F http://blog.csdn.net/luoweifu/article/details/42759439
正则表达式可以用形式化语言理论的方式进行表述。它右常量和算子组成,分别表示指示字符串的集合和在这些集合上的运算。具体如下:
1) 空集:φ指示集合φ。
2) 空串:ε指示集合{ε}
3) 文字字符:在∑中的a指示集合{a}
相关运算如下:
1) 串接:RS指示集合。如:{“ab”, “c”}{“d”,”ef”}= {“abd”, “abef”, “cd”, “cef”}。
2) 选择:R|S指示R和S的并集。如:{“ab”, “c”}|{“d”,”ef”}= {“ab”, “ef”, “c”, “d”}。
3) 星号*:R*指示包含ε并且闭合在字符串串接下的R的最小超集。可以通过R中的零或多个字符串的串接得到所有字符串的集合。如{“ab”, “c”}* = {ε, “ab”, “c”, “abab”, “abc”, “cba”, “cc”, “ababab”, …}。
它们之间存在优先级,*具有最高优先级,接着是串接,然后是并集。从而可以省略括号。如(ab)c可以谢伟abc,而a|(b(c*))可以写成a|bc*。
一个正则表达式通常被称为一个模式,用来描述或者匹配一系列匹配某个句法规则的字符串。其表示式的形式结果基本如下:
1) 选择:
|竖直分隔符代表选择。如”gray|grey“可以匹配gray和grey。
2) 数量:
某个字符后的数量限定符用来限制前面这个字符允许出现的个数。
+加号代表前面的字符必须至少出现一次(1次或多次)。
?问号代表前面的字符最多只可以出现一次。(0次或1次)。
*星号代表前面的字符可以不出现,也可以出现一次或者多次(0次或1次或多次)。
3)匹配:
圆括号可以用来定义操作符的范围和优先度。如”gr(a|e)y”等价于”gray|grey”,”(grand)?father”匹配father和grandfather。一些结构可以自由组合,可能不同的规则,但是结果相同。如”H(ae?|c)ndel”与“H(a|ae|c)ndel是相同的。
正则表达式优先级:
最高:\;
高:()、(?: )、(?= )、[]
中:*、+、?、{n}、{n,}、{m, n}
低:^、$、中介字符
最低:|
常用正则表达式表:
模式 | 匹配的内容(含义) |
| |
字符类 | |
[abc] | a、b或c(简单类) |
[^abc] | 任何字符,除了a、b或c(否定) |
[a-zA-Z] | a到z或A到Z,两头的字母包含在内(范围) |
[a-d[m-p]] | a到d或m到p:[a-dm-p](并集) |
[a-z&&[def]] | d、e或f(交集) |
[a-z&&[^bc]] | a到z,除了b和c:[ad-z](减去) |
[a-z&&[^m-p]] | a到z,而非m到p:[a-lq-z](减去) |
| |
预定义字符类 | |
. | 任何字符(与行结束符可能匹配也可能不匹配) |
\d | 数字:[0-9] |
\D | 非数字:[^0-9] |
\s | 空白字符:[\t\n\x0B\f\r] |
\S | 非空白字符[^\s] |
\w | 单词字符:[a-zA-z_0-9] |
\W | 非单词字符:[^\w] |
| |
边界匹配器 | |
^ | 行的开头 |
$ | 行的结尾 |
\b | 单词边界 |
\B | 非单词边界 |
\A | 输入的开头 |
\G | 上一个匹配的结尾 |
\Z | 输入的结尾,仅用于最后的结束符(如果有的话) |
\z | 输入的结尾 |
| |
数量词(Greedy策略) | |
X? | X,一次或一次也没有 |
X* | X,零次或多次 |
X+ | X,一次或多次 |
X{n} | X,恰好n次 |
X{n,} | X,至少n次 |
X{n,m} | X,至少n次,但是不超过m次 |
| |
逻辑运算符 | |
XY | X后跟Y |
X|Y | X或Y |
(X) | X,作为捕获组 |
正则表达式应用:
数据验证:可以检查输入的字符串,看其是否符合某种格式;
查找子串:可以查找文档内(或一个字符串内)符合指定模式的子串;
替换文本:可以使用正则表达式来识别文档中的特定内容,完全删除该部分内容或者用其他字符串来替换它;
使用工具:Word、Notepad++、EditPlus等文字编辑器中的查找功能都支持正则表达式,用正则表达式可以实现更加多样化的查找。VS、CodeBlock、Eclipse、Intellij Idea等开发工具的IDE的查找替换功能也都支持正则表达式,用它可以修改变量名,调整代码格式,统计代码行数。
参考文献:
https://zh.wikipedia.org/wiki/%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F http://blog.csdn.net/luoweifu/article/details/42759439
相关文章推荐
- eclipse不打印Logcat信息
- 第一章 基础
- ldpack工作日记-2016/4/21
- POJ 2528 Mayor's posters(离散化+线段树)
- H3C DLDP
- 第九周
- 两种方式实现文字超链接
- python的一些细节(1)
- RESTClient使用
- java 两种上传文件(图片)方式(app通过流上传)+服务端获取方式(多图上传,普通文本上传,图片压缩)
- BZOJ2763[JLOI2011]飞行路线 【分层图最短路】
- 对Xabber源码解析的过程(3)connection
- JavaScript ECMAScript5
- 你最喜欢做什么--兴趣问题清单
- getAttribute()与getParameter的区别
- Dism 错误 126
- Thrift搭建分布式微服务(一)
- CF116D 一开始往右扫,每换下一行要换方向扫,问扫完草至少经过的步数
- POJ-3461 Oulipo
- CCNA知识点