正则表达式入门教程
以下内容经正则表达式学习网授权
≈正则表达式是什么?≈
在使用电脑进行各种文字处理的时候,我们有时需要查和匹配一些特殊的字符串,如邮箱地址、验证用户输入的密码是否包含了大小写字母和数字,查HTML源文档中的所有web地址等等,这时我们就可以使用到正则表达式。
正则表达式本身是一个“字符串”,通过这个“字符串”去描述字符组成规则。如abbb、abbbb、abbbbb这三个字符串包都是以a字母开头a后面有一个b字母,而且b字母重复了3到5次。用正则表达式来描述就是ab{3,5},b{3,5}表示b字符重复3到5次。如果我们想匹配ababab这样的字符串,ab重复了3次,用正则表达式表示就是(ab){3},圆括号()是正则表达式中的分组。大家如果想亲自感受正则表达式的使用效果,可以打开正则表达式测试系统。
如以上实例所展示的,正则表达式为人们提供了一种简单易用的字符处理工具。它在目前主流的文字处理软件中都提供了良好的支持(不仅是编程软件,还有文字处理软件Uedit32、E
ditPlus,网页采集软件火车头等等),它具有很强的通用性,学好它,我们可以达一变应万变的效果。
≈正则表达式详解≈
像{},()这种在正则表达式中,具有特殊含义的字符称为元字符(metacharacter)。元字符是组成正则表达式的基本元素,在正则表达式经常使用的元字符不是很多,概念容易理解。大家只要花30来分钟学完我们的教程基本上就可以完全掌握。
为了您能更快速的掌握正则表达式,我们为您推荐一款方便的正则表达式在线测试工具“RegExr”,(RegExr由gskinner免费提供)。
保留字符 匹配字符本身 匹配字符数量 匹配字符位置 分组匹配 表达式选项
保留字符 (返回目录)
在正则表达式中,有一些字符在正则表达式中具有特殊含义被称保留字符,如*表示前一个元素可以重复零次或多次,要匹配“*”字符本身使用\*,半角句号 . 匹配除了换行符外的所有
字符,要匹配“.”使用 \. 。
\*和\.中斜杠\称为转义符,正则表达式中要匹配保留字符本身时都要加上转义符。同理要匹配反斜杠自身“\”要使用\\,第一个斜杠是转义符,第二个是斜杠本身。匹配字符串“\\”就为\\\\,第一个和第三个斜杠是转义符。
保留字 | 说明 | 保留字 | 说明 |
\ | 将下一个字符标记为一个特殊字符、或一个原义字符、或一个向后引用、或一个八进制转义符。例如,“n”匹配字符“n”。“\n”匹配一个换行符。序列“\\”匹配“\”而“\(”则匹配“(”。 | . | 匹配除了换行符(\n)以外的任意一个字符。要匹配小数点本身,请使用 "\." |
$ | 匹配输入字符串的结尾位置。要匹配 "$" 字符本身,请使用 "\$" | ^ | 匹配输入字符串的开始位置。要匹配 "^" 字符本身,请使用 "\^" |
* | 修饰匹配次数为 0 次或任意次。要匹配 "*" 字符本身,请使用 "\*" | + | 修饰匹配次数为至少 1 次。要匹配 "+" 字符本身,请使用 "\+" |
() | 标记一个子表达式的开始和结束位置。要匹配小括号,请使用 "\(" 和 "\)" | ? | 修饰匹配次数为 0 次或 1 次。要匹配 "?" 字符本身,请使用 "\?",当问号放在表达数量的元字符后面时,匹配模式是非贪婪的。如a\d+会匹配 a123231 中的所有字符(贪婪式下,表达式会尽可能多的匹配),但改成a\d?就只会匹配a1了(非贪婪模式下,表达式会尽可能少的匹配)。 |
{} | 修饰匹配次数的符号。要匹配大括号,请使用 "\{" 和 "\}" | [] | 用来自定义能够匹配 '多种字符' 的表达式。要匹配中括号,请使用 "\[" 和 "\]" |
| | 左右两边表达式之间 "或" 关系。匹配 "|" 本身,请使用 "\|" | ||
匹配字符本身 (返回目录)
元字符本身就可以代表了某个具体的字符,如:\s可以匹配空格,\w可以匹配数字、字母和下划线,\d可以匹配数字,\s、\w、\d如果改成大写的话就可以进行反向匹配,\S匹配所有的非空格字符,\W匹配所有非单词字符的字符,\D匹配除了0-9外的所有字符。[]可以匹配取值范围,如[abc]匹配文本中的a或b或c。
正则表达式中不能直接匹配中文字符,必需字符编码形式来进行匹配,如“中华”这两个字符的十六进制unicode编码(编码查看工具)是0x4e2d和0x534e,正则表达式的书写形式为\u4e2d和\u534e(亲手试试)。
换行符在不同的系统和环境中有所有不,JavaScript测试环境中的换行符是\n,而flash测试环境中的换行符是\r,如果我们两行字,第一行的内容一个a字母,第二行的内容是个b字母,表达式的正确写法是javascript中为a\nb,而flash中写为a\rb。如果大家想更多的了解\r与\n可以看(\n和\r详细说明)。
元字符 | 描述 | 表达式 | 匹配举例 |
. | 这是一个英文句号,匹配除换行符外(\n)的任意单个字符。 | a.e | “nave”中的“ave” “water”中的“ate” |
\w | 匹配单词字符(字母、数字、下划线)。 | \w | “ID A1.3”中的“I”、“D”、“A”、“1”和“3” |
\W | 匹配非单词字符(除了字母、数字、下划线的所有字符)。 | \W | unicode在线工具 “ID A1.3”中的“ ”、“.” |
\s | 匹配单个空白字符。 | \w\s | “ID A1.3”中的“D” |
\S | 匹配非空白字符。 | \s\S | “int __ctr”中的“ _” |
\d | 匹配0-9这十个数字中的任意一个。 | \d | “4 = IV”中的“4” |
\D | 匹配所有非数字字符。 | \D | “4 = IV”中的“ ”、“=”、“ ”、“I”和“V” |
[ae] | 匹配字符组中的任意一个字符。 | [ae] | “gray”中的“a” “lane”中的“a”和“e” |
[^aei] | 加上^表示反向匹配,意思是除了组内字符外的所有字符都会匹配。 | [^aei] | “reign”中的“r”、“g”和“n” |
[a-d] | 方括号内加上“-”这个符号表示一个区间,如[a-d]匹配a,b,c,d这4个字符,也可以用[abcd]来表示。 | [b-d] | “abcdef”中的“bcd” |
\0 | 匹配null空字符(Unicode编码:0x0000)。 | ||
\n | 匹配换行符(Unicode编码:0x000A),换行符 \n 与回车符\r 意思不同(\n和\r详细说明)。 | \r\n(\w+) | “\r\nThese are\ntwo lines.”中的“\r\nThese” |
\f | 匹配换页符(Unicode编码:0x000C)。 | [\f]{2,} | “\f\f\f”中的“\f\f\f” |
\r | 匹配回车符(Unicode编码:0x000D),回车符\r 与换行符 \n 意思不同(\n和\r详细说明)。 | \r\n(\w+) | “\r\nThese are\ntwo lines.”中的“\r\nThese” |
\t | 匹配制表符(Unicode编码:0x0009)。 | (\w+)\t | “item1\titem2\t”中的“item1\t”和“item2\t” |
\v | 匹配垂直制表符(Unicode编码:0x000B)。 | [\v]{2,} | “\v\v\v”中的“\v\v\v” |
\xxx | 匹配以八进制数 xxx 规定的字符。(字符编码历史和原理详解) | \w\040\w | “a bc d”中的“a b”和“c d” |
\xdd | 匹配以十六进制数dd规定的字符(dd恰好由2位数字组成)。(字符编码历史和原理详解) | \w\x20\w | “a bc d”中的“a b”和“c d”。 |
\uxxxx | 匹配以十六进制数 xxxx 规定的 Unicode字符(Unicdoe由两个字节组成)。(字符编码历史和原理详解) | \w\u0020\w | “a bc d”中的“a b”和“c d” |
匹配字符数量 (返回目录)
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论