论坛首页 综合技术论坛

教你正则表达式

浏览 2241 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2008-04-24  

我同学写了一个正者的验证,就是几个例子 。看了一下...感觉应该授之于渔...

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

正则表达式就是记录文本规则的代码。
很可能你使用过Windows/Dos下用于文件查找的通配符(wildcard),也就是*和?。如果你想查找某个目录下的所有的Word文档的话,你会搜索

*.doc。在这里,*会被解释成任意的字符串。和通配符类似,正则表达式也是用来进行文本匹配的工具,只不过比起通配符,它能更精确地描述你的需求——当然,代价就是更复杂。
学习正则表达式的最好方法是从例子开始:试验"假设你在一篇英文小说里查找hi",答案:"正则表达式hi"没忽悠你。是这样的。这是最简单的正则表达式,它可以精确匹配这样的字符串。很不幸,很多单词里包含hi这两个连续的字符,比如him,history,high等等。用hi来查找的话,这里边的hi也会被找出来。精确一点,改为\bhi\b吧。\b是正则表达式规定的一个特殊代码(元字符 )。下面会详细说它。代表着单词的开头或结尾,也就是单词的分界处。假如你要找的是hi后面不远处跟着一个Lucy,那么你应该用\bhi\b.*\bLucy\b;'.'和'*'都是元字符。前者匹配除了换行符以外的任意字符,后者是数量。.*连在一起就意味着任意数量的不包含换行的字符。如果同时使用其它元字符,我们就能构造出功能更强大的正则表达式。不难吧...哈哈因为你是天才...
正则表达式的语法很令人头疼 ,即使你是天才也会这么认为。由于难于读写,容易出错,所以找一种工具对正则表达式进行测试是很有必要的。在不同的环境下正则表达式的一些细节是不相同的,本人推荐RegexTester.exe。

元字符 ...注意了上面没看懂的....
现在你已经知道几个很有用的元字符了,如\b,.,*,还有\d.正则表达式里还有更多的元字符,比如\s匹配任意的空白符,包括空格,制表符(Tab),换行符,中文全角空格等。\w匹配字母或数字或下划线或汉字等。
对中文/汉字的特殊处理是由.Net提供的正则表达式引擎支持的,其它环境下的具体情况请查看相关文档。
下面来看看更多的例子:
\ba\w*\b匹配以字母a开头的单词——先是某个单词开始处(\b),然后是字母a,然后是任意数量的字母或数字(\w*),最后是单词结束处(\b)。
好吧,现在我们说说正则表达式里的单词是什么意思吧:就是多于一个的连续的\w。不错,这与学习英文时要背的成千上万个同名的东西的确关系不大 :)
\d+匹配1个或更多连续的数字。这里的+是和*类似的元字符,不同的是*匹配重复任意次(可能是0次),而+则匹配重复1次或更多次。
\b\w{6}\b 匹配刚好6个字母/数字的单词。
常用的元字符 代码 说明
. 匹配除换行符以外的任意字符
\w 匹配字母或数字或下划线或汉字
\s 匹配任意的空白符
\d 匹配数字
\b 匹配单词的开始或结束
^ 匹配字符串的开始
$ 匹配字符串的结束
元字符^(和数字6在同一个键位上的符号)和$都匹配一个位置,这和\b有点类似。^匹配你要用来查找的字符串的开头,$匹配结尾。这两个代码在验证输入的内容时非常有用,比如一个网站如果要求你填写的QQ号必须为5位到12位数字时,可以使用:^\d{5,12}$。
这里的{5,12}和前面介绍过的{2}是类似的,只不过{2}匹配只能不多不少重复2次,{5,12}则是重复的次数不能少于5次,不能多于12次,否则都不匹配。
因为使用了^和$,所以输入的整个字符串都要用来和\d{5,12}来匹配,也就是说整个输入必须是5到12个数字,因此如果输入的QQ号能匹配这个正则表达式的话,那就符合要求了。我同学举了这个例子...不过学了这招他上面的例子你可以一个个自己写不要记了...哈哈
和忽略大小写的选项类似,有些正则表达式处理工具还有一个处理多行的选项。如果选中了这个选项,^和$的意义就变成了匹配行的开始处和结束处。
字符转义:

如果你想查找元字符本身的话,比如你查找.,或者*,就出现了问题:你没办法指定它们,因为它们会被解释成别的意思。这时你就得使用\来取消这些字符的特殊意义。因此,你应该使用\.和\*。当然,要查找\本身,你也得用\\. 好累...不过会编程的都知道
例如:unibetter\.com匹配unibetter.com,C:\\Windows匹配C:\Windows。

重复:
你已经看过了前面的*,+,{2},{5,12}这几个匹配重复的方式了
下面是正则表达式中所有的限定符
常用的限定符 代码/语法 说明
* 重复零次或更多次
+ 重复一次或更多次
? 重复零次或一次
{n} 重复n次
{n,} 重复n次或更多次
{n,m} 重复n到m次
如:Windows\d+匹配Windows后面跟1个或更多数字

好累 今天就写这么多剩下的以后些吧...谢谢大家关注

   发表时间:2008-12-02  
嘿 呵呵,,,,,
菜鸟级文章啊,
写点有难度的吗,
0 请登录后投票
论坛首页 综合技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics