正则表达式是什么?
System.Text.RegularExpressions 这个命名空间包含进来: 正则表达式的工作方式就象Windows或者*nix系统里面的文件名替代符 - 你可以使用特定的*或者?来指定一系列文件。但是使用正则表达式的特殊字符或者metacharacters(元字符)来表示这类事情会更准确。 正则表达式把大多数字符当作直接字符,就好像正则表达式 mike,将只会匹配按顺序的字符序列m - i - k - e。与此同时正则表达式使用一个采用元字符的扩展集合,可以表示非常复杂的文字匹配。 认识元字符: ^[](){}.*?|+$ 以及在某些时候出现的 - 行定位点: ‘^’ 和 ‘$’ 如果我们联合使用这两个行定位点字符,我们可以搜索在多行文字中寻找包含的特殊字符串序列。比如:表达式 ^mike$ 将只会匹配占有单独一行的单词mike,一个字不多一个字不少。同样,表达式 ^$ 对于发现空行(一行开始就是本行结束的那种)很有用。 字符分类: ‘[]’ 如果你用 [^ ... ] 代替 [ ... ],这个分类将匹配后面列出来字符以外的任何字符。首字符 ^ 表示“否定"列表 - 不同于你列出所有希望包含的字符,你是去列出所有不想包含的字符。注意在这里使用的^ (caret) 字符,它在字符分类方式之外使用表示另外的意思 - 用来匹配文字行的开始(见文章前面部分)。 字符分类中的元字符: ‘-’ 但是且慢,我看到有人举手质疑。假如在一个字符分类里面,’-’字符做为第一个字符出现的时候,会把它认为成什么呢?比如[-A-F],问题很好,注意:这是一个例外,如果在字符分类中,’-’字符是第一个出现的字符,那我们把它当作普通字符而不是元字符处理(因为实际上它不可能表示一个字符范围,范围需要有开始和结束字符),这个时候它只会匹配一个普通的’-’字符。引申开来,我们再说一个例外:S’?’和’.’在大多数情况下都是正则表达式的元字符,但是有个例外是在字符分类中,当它们在字符分类中的时候(比如在:[-0-9.?],它们只是代表一个普通字符,唯一的特殊字符(元字符)是0和9中间的’-’)。 用一个句点: ‘.’匹配任何字符 选择性元字符: ‘|’ 例如:Mike 和 Michael 是两个独立的正则表达式,但是Mike|Michael 这样来写的话,这个正则表达式匹配任意一个单词。 圆括号在这里可以被用来限制备选的范围。我们可以使用圆括号来达到和上面这个正则表达式同样的目的,同时缩短它长度,正则表达式Mi(ke|chael) 同样匹配Mike或者Michael。当然,在实际程序中我还是会用第一种写法,虽然长了一点,可是更容易理解,因此也更容易维护。 匹配可选项: ‘?’ 如果我想匹配英式或者美式拼法的单词‘flavor’ ,我会用正则表达式flavou?r,它被解读成:“匹配一个字符串:f,跟着一个l,跟着一个a,跟着一个v,跟着一个o,跟着一个可选的u,跟着一个r”。 数量符号: ‘+’ and ‘*’ 如果我想通过在一场足球比赛中解说员说’goal’的声音次数来统计比分的话,我应该用正则表达式go+al,它可以匹配‘goal’,也可以匹配一些激情主播的‘gooooooooooooooooal’ (但肯定不会是 ‘gal’)。 前面的三个元字符:’?’、’+’、’*’一般又叫做计量符。因为它们影响前面项目的数量。 数量范围: ‘{}’ 转义字符: ‘’ 如果在一个非元字符前面使用’’的话,那么根据你使用正则表达式的语言不同,会有不同的含义,必须参阅相应的手册。比较普遍采用的是perl兼容的正则表达式(PCREs),你可以在这里查看the perldoc page for perl regular expressions. PCREs用得非常普遍,在PHP、 Ruby和ECMAScript/Javascript还有很多语言中都可以使用。 用圆括号匹配: ‘()’ 这个表达式的起始部分非常直白:它必须匹配“h - t - t - p - : - / - /”这样的字符序列。这个初始序列之后就是圆括号了,它被用来捕捉符合它们包围的子表达式的字符。在现在的例子中,子表达式是‘[^/]+’,用上面学到的知识,我们知道它实际上是匹配除了‘/’字符以外的任何字符一次到多次。对于一个像是http://immike.net/blog/Some-blog-post的URL,‘immike.net’ 将会被这个圆括号里面的表达式所匹配。 希望进一步学习? 第二步是用正则表达式识别URL超链接: Regex urlregex = new Regex(@"(http://([w.]+/?)S*)", 这里的代码是用正则表达式识别Email地址: Regex emailregex = new Regex(@"([a-zA-Z_0-9.-]+@[a-zA-Z_0-9.-]+.w+)",Tohoma; font-size:14px; line-height:22px"> 第三步,当程序已经识别出URL超链接或Email地址后,必须用<a href=...>超链接</a>对这些超链接进行替换,这样才能把这些文字显示为链接的形式。我这里把它们全部包含在函数中: private void Button1_Click(object sender,System.EventArgs e) { string strContent = InputTextBox.Text; Regex urlregex = new Regex(@"(http://([w.]+/?)S*)",RegexOptions.IgnoreCase| RegexOptions.Compiled); strContent = urlregex.Replace(strContent,"<a href="" target="_blank"></a>"); Regex emailregex = new Regex(@"([a-zA-Z_0-9.-]+@[a-zA-Z_0-9.-]+.w+)",RegexOptions.IgnoreCase| RegexOptions.Compiled); strContent = emailregex.Replace(strContent,"<a href=mailto:></a>"); lbContent.Text += "<br>"+strContent; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |