正则表达式入门

来源:互联网 发布:民族知识知多少 编辑:程序博客网 时间:2024/06/06 04:40

正则表达式是对字符串操作的一种逻辑公式
下面是我在学习正则表达式时的几个小例子,仿照前一篇的表达式一览表,你会看的很清楚。

单词hi后面不远处跟着一个单词Lucy \bhi\b.*\bLucy\b
这里的 \b 元字符,匹配一个位置,匹配单词的开头或者结尾,也就是单词的分界处;
. 元字符,匹配除了换行以外的任意字符
* 元字符,代表数量,表示前面的字符可以重复出现任意次 ,.* 表示任意次数的换行以外的字符

匹配以字母a开头的单词 \ba[a-z]*
[] 表示一个集合 匹配 [] 中的集合,[0-9]表示数字 ,[?.  ]表示匹配 ?.或空格中的一个
当然 题目也可以用 \ba\w*\b 表示; \w 匹配字母数字下划线或者汉字(然而匹配汉字并不好用)

匹配手机号 ^1[34578]\d{9}$
^ 匹配开头 , {n} 表示前面的内容重复n次 , $ 表示结束

* 例 *
   (\d{1,3}\.){3}\d{1,3} 是一个简单的IP地址匹配表达式。要理解这个表达式,请按下列顺序分析它:\d{1,3} 匹配1到3位的数字,(\d{1,3}\.){3} 匹配三位数字加上一个英文句号(这个整体也就是这个分组)重复3次,最后再加上一个一到三位的数字(\d{1,3})
   不幸的是,它也将匹配256.300.888.999这种不可能存在的IP地址。如果能使用算术比较的话,或许能简单地解决这个问题,但是正则表达式中并不提供关于数学的任何功能,所以只能使用冗长的分组,选择,字符类来描述一个正确的IP地址:((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)
   理解这个表达式的关键是理解2[0-4]\d|25[0-5]|[01]?\d\d?,这里我就不细说了,你自己应该能分析得出来它的意义。

例5、 反义
<a[^>]+> 匹配用尖括号括起来的以a开头的字符串.

后向引用
使用小括号指定一个子表达式后,匹配这个子表达式的文本(也就是此分组捕获的内容)可以在表达式或其它程序中作进一步的处理。默认情况下,每个分组会自动拥有一个组号,规则是:从左向右,以分组的左括号为标志,第一个出现的分组的组号为1,第二个为2,以此类推。
后向引用用于重复搜索前面某个分组匹配的文本。例如,\1代表分组1匹配的文本。难以理解?请看示 例
例:
\b(\w+)\b\s+\1\b可以用来匹配重复的单词,像go go, 或者kitty kitty。这个表达式首先是一个单词,也就是单词开始处和结束处之间的多于一个的字母或数字 (\b(\w+)\b),这个单词会被捕获到编号为1的分组中,然后是1个或几个空白符(\s+),最后是分组1中捕获的内容(也就是前面匹配的那个单词)(\1)
你也可以自己指定子表达式的组名。要指定一个子表达式的组名,请使用这样的语法:(?<Word>\w+)(或者把尖括号换成’也行:(?'Word'\w+)),这样就把\w+的组名指定为Word了。要反向引用这个分组捕获的内容,你可以使用\k<Word> ,所以上一个例子也可以写成这样:\b(?<Word>\w+)\b\s+\k<Word>\b
使用小括号的时候,还有很多特定用途的语法。更多请参照上一篇博客,表达式一览表
注释 (?#comment) 这种类型的分组不对正则表达式的处理产生任何影响,用于提供注释让人阅读。

0 0
原创粉丝点击