正则表达式

来源:互联网 发布:淘宝如何用淘口令 编辑:程序博客网 时间:2024/06/07 16:20

转自 http://deerchao.net/tutorials/regex/regex.htm#introduction


开始--运行--gpedit.msc--“本地计算机”策略--用户配置--Windows设置--脚本(登陆/注销)--右测点登陆,

然后填入脚本路径。

在编写处理字符串的程序或网页时,经常会有查找符合某些复杂规则的字符串的需要。正则表达式就是用于描述

这些规则的工具。换句话说,正则表达式就是记录文本规则的代码。

元字符

1.  /b单词的开头或结尾,也就是单词的分界处。
2.  .匹配除了换行符以外的任意字符。
3.  *它代表的不是字符,也不是位置,而是数量——它指定*前边的内容可以连续重复使用任意次以使整个表达

式得到匹配。
.*连在一起就意味着任意数量的不包含换行的字符。  /n 换行符
4.  /d匹配一位数字。  d/+匹配一位以上数字,d/*匹配0位或多位。
5.  /s匹配任意的空白符。包括空格,制表符(Tab),换行符,中文全角空格等。
6.  /w匹配字母、数字、下划线、汉字等。
7.  ^字符串的开始
8.  $字符串的结束

反义
1.  /B匹配不是以单词开头或结束的位置
2.  /D任意非数字的字符
3.  /S任意不是空白符的字符
4.  /W匹配任意不是字母、数字、下划线、汉字的字符
5.  [^x]匹配除x以外的任意字符


元字符转义
/  www.sohu.com  写成 www/.sohu/.com

分组
() 小括号来指定子表达式(也叫做分组)

重复
1.  *重复0次或多次
2.  +重复1次或多次
3.  ?重复0次或1次
4.  {n}重复n次
5.  {n,}重复n次或更多次
6.  {n,m}重复n次到m次

分支条件
| 用|把不同的规则分隔开。

 

后向引用
/1代表分组1匹配的文本。/b(/w+)/b/s+/1/b可以用来匹配重复的单词。与这个同:/b(?<Word>/w+)

/b/s+/k<Word>/b


捕获
(exp) 匹配exp,并捕获文本到自动命名的组里
(?<name>exp) 匹配exp,并捕获文本到名称为name的组里,也可以写成(?'name'exp)
(?:exp) 匹配exp,不捕获匹配的文本,也不给此分组分配组号

零宽断言 (?=exp) 匹配exp前面的位置
(?<=exp) 匹配exp后面的位置
(?!exp) 匹配后面跟的不是exp的位置
(?<!exp) 匹配前面不是exp的位置
注释 (?#comment) 这种类型的分组不对正则表达式的处理产生任何影响,用于提供注释让人阅读


懒惰限定符
*? 重复任意次,但尽可能少重复
+? 重复1次或更多次,但尽可能少重复
?? 重复0次或1次,但尽可能少重复
{n,m}? 重复n到m次,但尽可能少重复
{n,}? 重复n次以上,但尽可能少重复

 

举例
1./bsearchword/b

2. 0/d/d-/d/d/d/d/d/d/d/d匹配这样的字符串:以0开头,然后是两个数字,然后是一个连字号“-”,最后是8

个数字,也就是中国的电话号码。
0/d{2}-/d{8}, 这里/d后面的{2}({8})的意思是前面/d必须连续重复匹配2次(8次)。

3. ^/d{5,12}$,5位到12位数字。
4. win/d+ win后面跟一个或多个数字
5. ^/w+ 匹配一行的第一个单词
6. [aeiou]匹配任何一个英文元音字母;[^aeiou] 匹配除了aeiou这几个字母以外的任意字符。
6. [.?!]匹配标点符号(.或?或!)
7. [0-9]代表的含意与/d就是完全一致的:一位数字
8. [a-z0-9A-Z_]也完全等同于/w(如果只考虑英文的话)

9. /(?0/d{2}[) -]?/d{8}。
“(”和“)”也是元字符。
这个表达式可以匹配几种格式的电话号码,像(010)88886666,或022-22334455,或02912345678等。我们对它进

行一些分析吧:首先是一个转义字符/(,它能出现0次或1次(?),然后是一个0,后面跟着2个数字(/d{2}),然后是

)或-或空格中的一个,它出现1次或不出现(?),最后是8个数字(/d{8})。

但是也能匹配010)12345678或(022-87654321这样的“不正确”的格式。


10. 0/d{2}-/d{8}|0/d{3}-/d{7}
能匹配两种以连字号分隔的电话号码:一种是三位区号,8位本地号(如010-12345678),一种是4位区号,7位本

地号(0376-2233445)。

11./(0/d{2}/)[- ]?/d{8}|0/d{2}[- ]?/d{8}
这个表达式匹配3位区号的电话号码,其中区号可以用小括号括起来,也可以不用,区号与本地号间可以用连字

号或空格间隔,也可以没有间隔。

12./d{5}-/d{4}|/d{5}
这个表达式用于匹配美国的邮政编码。美国邮编的规则是5位数字,或者用连字号间隔的9位数字。之所以要给出

这个例子是因为它能说明一个问题:使用分枝条件时,要注意各个条件的顺序。
如果你把它改成/d{5}|/d{5}-/d{4}的话,那么就只会匹配5位的邮编(以及9位邮编的前5位)。原因是匹配分枝条

件时,将会从左到右地测试每个条件,如果满足了某个分枝的话,就不会去再管其它的条件了。

12. IP地址:((2[0-4]/d|25[0-5]|[01]?/d/d?)/.){3}(2[0-4]/d|25[0-5]|[01]?/d/d?)。
最大为255

13. /S+匹配不包含空白符的字符串。

14. <a[^>]+>匹配用尖括号括起来的以a开头的字符串。<ab>是,<a>不是。a[^>]意思是a之后不能马上跟着>。