转载

正则表达式学习

最近项目需要用到正则表达式,处理字符串。正则表达式我也是第一次接触,这个随笔记录一下学习的心得;

首先我需要从一串url中将协议、域名、以及端口号提取出来;

我用了这么一串正则表达式:

^((https|http|ftp|rtsp|mms):////)?([^:/]+)([:]([0-9]+))?$

开头第一个^匹配输入字符串开始的位置;

结尾$匹配输入字符串结尾的位置;

表达式中每一个括号都表示一个子表达式,并可以捕获;

如下面一串url:http://192.168.0.1:801;

(https|http|ftp|rtsp|mms) 匹配http,((https|http|ftp|rtsp|mms):////)匹配http://

((https|http|ftp|rtsp|mms):////)? 中 ?号表示前面这串正则匹配的字数可以为0次或者1次;

([^:/]+)匹配的是 192.168.0.1,[^:/]表示匹配不是:或者/的字符,+表示前面这串字符匹配次数可以为多次;

([:]([0-9]+))?匹配的是:801 里括号([0-9]+)表示多次匹配0-9的字符,[:]表示匹配:。捕获端口,若没有端口不捕获;

这是我要求的正则表达式的主体,现在用C#实现我的要求;

引入空间命名 System.Text.RegularExpressions;

Regex r = new Regex(@"^((?<proto>https|http|ftp|rtsp|mms):////)?(?<domain>[^:/]+)([:](?<port>[0-9]+))?$", RegexOptions.Compiled);

//(?<名称>正则表达式),这是分组构造的写法。意思是将正则表达式匹配的内容捕获放入命名组<名称>中;

var match= r.Match("http"//192.168.0.1:801");

string proto=match.Result("${proto}");

string domain=match.Result("${domain}");

string port=match.Result("${port}");

//使用上述方法就可以把命名组中的字符串取出来;

我用我自己的实例简单的介绍了一下正则表达式的用法。楼主也是初接触正则表达式,还比较生疏,望见谅;

https://msdn.microsoft.com/zh-cn/library/az24scfc.aspx

微软这个站点学习起来还是比较方便的;

原文  http://www.cnblogs.com/henryluhanlin/p/Regalr_learning.html
正文到此结束
Loading...