正则表达式入门

根据使用环境的不同,有的时候正则表达式需要"/\d*/",有的时候不需要,直接"\d*",使用的时候还需要根据环境来

 

常用正则关键符号:

元字符

.

匹配除了换行符以外的任意字符

\w

word 匹配字母或数字或下划线或汉字等

\s

space 匹配任意的空白符,包括空格,制表符(Tab),换行符,中文全角空格等

\d

digital 表示数字

\b

break 单词分割符,匹配一个位置

^

字符串的开始

$

字符串的结尾

\

去除元字符的含义

重复

{2}

前面连续重复出现的次数2次

{5,12}

前面连续重复出现5-12次

{5,}

重复5次或者更多次

*

0次或者多次,它指定*前边的内容可以连续重复使用任意次以使整个表达式得到匹配

+

则匹配重复1次或更多次。{1,}

?

重复0次或者1次

 

 

字符类,[]限定范围内的字符

[aeiou]

就匹配任何一个英文元音字母

[.?!]

匹配标点符号(.或?或!)

[a-z0-9A-Z_]

也完全等同于\w(如果只考虑英文的话)

分枝条件, |

0\d{2}-\d{8}|0\d{3}-\d{7}

一种是三位区号,8位本地号(如010-12345678),一种是4位区号,7位本地号(0376-2233445)。

分组,重复多个字符(abc){2} 括号里面为一组

(\d{1,3}\.){3}\d{1,3}

简单的IP地址匹配表达式

((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)

正确的分组ip匹配

反义,大写元字符,[^xxx]

 

\W

匹配任意不是字母,数字,下划线,汉字的字符

\S

匹配任意不是空白符的字符

\D

匹配任意非数字的字符

\B

匹配不是单词开头或结束的位置

[^x]

匹配除了x以外的任意字符,这里的^和字符串起始复用了

[^aeiou]

匹配除了aeiou这几个字母以外的任意字符

后向引用,其他见表4

\1

代表分组1匹配的文本

\b(\w+)\b\s+\1\b

用来匹配重复的单词,像go go, 或者kitty kitty。

\b(?<Word>\w+)\b\s+\k<Word>\b

用来匹配重复的单词,像go go, 或者kitty kitty。

 

贪婪与懒惰原则

通常的行为是(在使整个表达式能得到匹配的前提下)匹配尽可能多的字符。以这个表达式为例:a.*b,它将会匹配最长的以a开始,以b结束的字符串。如果用它来搜索aabab的话,它会匹配整个字符串aabab。这被称为贪婪匹配。

加上?后,就尽可能的少

表5.懒惰限定符

代码/语法

说明

*?

重复任意次,但尽可能少重复

+?

重复1次或更多次,但尽可能少重复

??

重复0次或1次,但尽可能少重复

{n,m}?

重复n到m次,但尽可能少重复

{n,}?

重复n次以上,但尽可能少重复

 

 

分组语法:分组命令、断言、注释

表4.常用分组语法

分类

代码/语法

说明

捕获

(exp)

匹配exp,并捕获文本到自动命名的组里

(?<name>exp)

匹配exp,并捕获文本到名称为name的组里,也可以写成(?'name'exp)

(?:exp)

匹配exp,不捕获匹配的文本,也不给此分组分配组号

零宽断言

(?=exp)

匹配exp前面的位置

(?<=exp)

匹配exp后面的位置

(?!exp)

匹配后面跟的不是exp的位置

(?<!exp)

匹配前面不是exp的位置

注释

(?#comment)

这种类型的分组不对正则表达式的处理产生任何影响,用于提供注释让人阅读

 

 

处理选项:不同的编程语言、工具开启模式的方法可能不一样,需要关注的时候谷歌下

忽略大小写

多行模式

单行模式

忽略空白

显示部门

 

vim magic 

(\m):除了 $ . * ^ 之外其他元字符都要加反斜杠。 默认设置nomagic 

(\M):除了 $ ^ 之外其他元字符都要加反斜杠。

这个设置也可以在正则表达式中通过 \m \M 开关临时切换。 \m 后面的正则表达式会按照 magic 处理,\M 后面的正则表达式按照 nomagic 处理, 而忽略实际的magic设置。

 

 

参考文档

http://deerchao.net/tutorials/regex/regex.htm

 

posted @ 2017-03-01 23:29  东京下雨,淋湿巴黎  阅读(338)  评论(0编辑  收藏  举报