正则表达式

正则表达式是什么?

  在编写处理字符串的程序或网页时,经常会有查找符合某些复杂规则的字符串的需要。正则表达式就是用于描述这些规则的工具。换句话说,正则表达式就是记录文本规则的代码。(http://www.unibetter.com/deerchao/zhengzhe-biaodashi-jiaocheng-se.htm)

正则表达式是一种语言,它可以明确描述文本字符串中的模式。(http://www.microsoft.com/china/msdn/library/webservices/asp.net/regexnet.mspx?pf=true)

正则表达式的规则?

非显式限定符:限定符(限定符始终引用限定符左边的模式,通常是单个字符,除非使用括号创建模式组。)

1.

*,描述“出现 0 或多次”。

2.

+,描述“出现 1 或多次”。

3.

?,描述“出现 0 或 1 次”。

显式限定符:显式限定符位于所应用的模式的后边,这一点与非显式限定符一样.如{}

元字符

代码说明
.匹配除换行符以外的任意字符
/w匹配字母或数字或下划线或汉字
/s匹配任意的空白符
/d匹配数字
/b匹配单词的开始或结束
^匹配字符串的开始
$匹配字符串的结束
|交替指定(a|b 将匹配包含“a”或“b”的任何输入内容)
( )模式分组

(abc){2,3}

abcabcabcabcabc

字符类:在方括号 [ ] 中定义

such as:

模式输入(匹配)

^b[aeiou]t$

Batbetbitbotbut

^[0-9]{5}$

11111, 12345, 99999

^c://

c:/windowsc://///c:/foo.txtc:/ 后跟任何其他内容

abc$

abc123abc abc 结束的任意字符串

(abc){2,3}

abcabcabcabcabc

^[^-][0-9]$

012、... (不匹配 -0、-1、 -2 等)

预定义的集合元字符:一切为了简变

元字符等效字符类

/a

匹配铃声(警报);/u0007

/b

匹配字符类外的字边界,它匹配退格字符,/u0008

/t

匹配制表符,/u0009

/r

匹配回车符,/u000D

/w

匹配垂直制表符,/u000B

/f

匹配换页符,/u000C

/n

匹配新行,/u000A

/e

匹配转义符,/u001B

/040

匹配 3 位 8 进制 ASCII 字符。/040 表示空格(十进制数 32)。

/x20

使用 2 位 16 进制数匹配 ASCII 字符。此例中,/x2- 表示空格。

/cC

匹配 ASCII 控制字符,此例中是 ctrl-C。

/u0020

使用 4 位 16 进制数匹配 Unicode 字符。此例中 /u0020 是空格。

/*

不代表预定义字符类的任意字符都只作为该字符本身对待。因此,/* 等同于 /x2A(是文字 *,不是 * 元字符)。

/p{name}

匹配已命名字符类“name”中的任意字符。支持名称是 Unicode 组和块范围。例如,Ll、Nd、Z、IsGreek、IsBoxDrawing 和 Sc(货币)。

/p{name}

匹配已命名字符类“name”中不包括的文本。

/w

匹配任意单词字符。对于非 Unicode 和 ECMAScript 实现,这等同于 [a-zA-Z_0-9]。在 Unicode 类别中,这等同于 [/p{Ll}/p{Lu}/p{Lt}/p{Lo}/p{Nd}/p{Pc}]

/W

/w 的否定,等效于 ECMAScript 兼容集合 [^a-zA-Z_0-9] 或 Unicode 字符类别 [^/p{Ll}/p{Lu}/p{Lt}/p{Lo}/p{Nd}/p{Pc}]

/s

匹配任意空白区域字符。等效于 Unicode 字符类 [/f/n/r/t/v/x85/p{Z}]。如果使用 ECMAScript 选项指定 ECMAScript 兼容方式,/s 等效于 [ /f/n/r/t/v] (请注意前导空格)。

/S

匹配任意非空白区域字符。等效于 Unicode 字符类别 [^/f/n/r/t/v/x85/p{Z}]。如果使用 ECMAScript 选项指定 ECMAScript 兼容方式,/S 等效于 [^ /f/n/r/t/v] (请注意 ^ 后的空格)。

/d

匹配任意十进制数字。在 ECMAScript 方式下,等效于 Unicode 的 [/p{Nd}]、非 Unicode 的 [0-9]

/D

匹配任意非十进制数字。在 ECMAScript 方式下,等效于 Unicode 的 [/p{Nd}]、非 Unicode 的 [^0-9]

怎么用正则表达式? 

请访问以下地址中的正则表达式联机数据库:http://www.regexlib.com/

模式说明

^/d{5}$

5 个数值数字,如美国邮政编码。

^(/d{5})|(/d{5}-/d{4}$

5 个数值数字或 5 个数字-短划线-4 个数字。匹配 5 位数字格式的美国邮政编码,或 5 位数字 + 4 位数字格式的美国邮政编码。

^(/d{5}(-/d{4})?$

与前一个相同,但更有效。使用 ? 可使模式中的 4 位数字成为可选部分,而不是要求分别比较不同的两个模式(通过另一种方式)。

^[+-]?/d+(/./d+)?$

匹配任意有可选符号的实数。

^[+-]?/d*/.?/d*$

与上一个相同,但也匹配空字符串。

^(20|21|22|23|[01]/d)[0-5]/d$

匹配 24 小时制时间值。

//*.*/*/

匹配 C 语言风格的注释 /* ... */

asp.net 中的使用?

private void ValidateZipButton_Click(object sender, System.EventArgs e)
{
   String ZipRegex = @"^/d{5}___FCKpd___0quot;;
   if(Regex.IsMatch(ZipTextBox.Text, ZipRegex))
   {
      ResultLabel.Text = "ZIP is valid!";
   }
   else
   {
      ResultLabel.Text = "ZIP is invalid!";
   }
}

类似的,可以使用静态 Replace() 方法将匹配替换为特定字符串,如下所示:

String newText = Regex.Replace(inputString, pattern, replacementText);

最后,可以使用如下代码遍历输入字符串的匹配集合:

private void MatchButton_Click(object sender, System.EventArgs e)
{
   MatchCollection matches = Regex.Matches(SearchStringTextBox.Text, 
MatchExpressionTextBox.Text);
   MatchCountLabel.Text = matches.Count.ToString();
   MatchesLabel.Text = "";
   foreach(Match match in matches)
   {
      MatchesLabel.Text += "Found" + match.ToString() + " at 
position " + match.Index + ".<br>";
   }
}
参考:
http://msdn.microsoft.com/library/chs/default.asp?url=/library/CHS/jscript7/html/jsreconintroductiontoregularexpressions.asp
http://www.unibetter.com/deerchao/zhengzhe-biaodashi-jiaocheng-se.htm(更深内容)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值