C#中如何使用正规表达式
这篇文章主要为大家展示了“C#中如何使用正规表达式”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“C#中如何使用正规表达式”这篇文章吧。
一.校验输入
正规表达式的一种最常用的场所是用于使用一些预先定义的格式(例如,强制建立的规则用于确保口令中包含特定的使其很难被拆断的字符)校验用户输入。这些规则被典型地定义为正规表达式。正规表达式也常用于校验简单的输入,例如电子邮件地址和电话号码。
.NET框架提供的操作正规表达式的一个关键类是RegEx类。这个类提供一个静态的方法IsMatch,它返回一个布尔值指示是否指定的输入字符串匹配一个给定的正规表达式。
在下列代码中,使用一个普通正规表达式来测试电子邮件地址的有效性:
string emailPattern = @"^([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|[ccc] (([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$"; Console.Write("Enter an e-mail address:"); string emailInput = Console.ReadLine(); bool match = Regex.IsMatch(emailInput, emailPattern); if (match) Console.WriteLine("E-mail address is valid."); else Console.WriteLine("Supplied input is not a valid e-mail address.");
如果你搞不清楚这个正规表达式,别担心。电子邮件模式的基本思想是,它需要一些数字字母字符,后面跟着一个@符号,然后是一些字符组合,再后面跟着一个".",再往后至少跟着两个字符。你可以以不同的输入试验前面的代码来看一下你得到什么结果。即使你不理解该正规表达式本身,只要知道它们的存在,那么你就可以把它使用于你的应用程序中来校验输入。
二.从输入中提取数据
C#正规表达式的其它常见的用法是,根据表达式分析文本以及使用之来从用户输入中提取数据(称作组匹配)。
正规表达式中包括一个特征叫组。一个组允许你把一个命名标识放到该正规表达式的一个特定节中。当你调用Match()来针对模式比较输入数据时,其结果实际上把匹配分成一些组,允许你提取匹配每一个组的输入的部分。
例如,在前面的例子中,我们创建了一个username,它允许我们提取在一个电子邮件地址中位于@符号前的所有数据。然后,当执行一个匹配时,我们能够使用正规表达式的命名组从输入中提取该username。
下列代码显示怎样从一个用户在控制台输入的URL中提取协议名字和端口号。正规表达式的伟大在于,它们使用自己的语言;因此,它们不必依赖于C、C++、C#、VB.NET或任何其它语言。在下列代码中的正规表达式来自于一个MSDN例子:
string urlPattern = @"^(?<proto>\w+)://[^/]+?(?<port>:\d+)?/"; Console.WriteLine(); Console.Write("Enter a URL for data parsing: "); string url = Console.ReadLine(); Regex urlExpression = new Regex(urlPattern, RegexOptions.Compiled); Match urlMatch = urlExpression.Match(url); Console.WriteLine("The Protocol you entered was " + urlMatch.Groups["proto"].Value); Console.WriteLine("The Port Number you entered was " + urlMatch.Groups["port"].Value);
当你使用不带有一个端口号的URL运行前面的代码时,你会注意到,你没有得到任何组值。这是因为,该输入根本不匹配C#正规表达式。当不存在匹配时,你显然无法从给定的组中提取有意义的数据。当你使用匹配该正规表达式的端口号的URL运行前面的代码时,你将得到如下列文本所示的输出结果:
Entera URL for data parsing: http://server.com:2100/home.aspx The Protocol you entered was http The Port Number you entered was :2100
以上是“C#中如何使用正规表达式”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网行业资讯频道!
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341