正则表达式:使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串。在文本编辑中,它可以用来检索、替换某个匹配的文本。
正则表达式可以用形式化语言理论的方式进行表述。它右常量和算子组成,分别表示指示字符串的集合和在这些集合上的运算。具体如下:
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