您的位置:首页 > 其它

正则表达式学习

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}

低:^、$、中介字符

最低:|

 

常用正则表达式表:

 

模式

匹配的内容(含义)

 

 

字符类

 

[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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: