C#——正则表达式的使用

C#正则表达式的使用

下面的代码示例使用静态 Regex.IsMatch 方法验证一个字符串是否为有效电子邮件格式。如果字符串包含一个有效的电子邮件地址,则 IsValidEmail 方法返回true,否则返回 false,但不采取其他任何操作。您可以使用 IsValidEmail,在应用程序将地址存储在数据库中或显示在 ASP.NET 页中之前,筛选出包含无效字符的电子邮件地址。

[C#]
bool IsValidEmail(string strIn)
{
// Return true if strIn is in valid e-mail format.
return Regex.IsMatch(strIn, @"^([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$");
}

2//判断当前文本框是否正整数
public bool IsNumber(string sValue)
{
return
Regex.IsMatch(sValue, @"^[0-9]*[1-9][0-9]*$");
}

使用二:替换

2.清理输入字符串
下面的代码示例使用静态 Regex.Replace 方法从字符串中抽出无效字符。您可以使用这里定义的 CleanInput 方法,清除掉在接受用户输入的窗体的文本字段中输入的可能有害的字符。CleanInput 在清除掉除 @-(连字符)和 .(句点)以外的所有非字母数字字符后返回一个字符串。

[C#]
String CleanInput(string strIn)
{
// Replace invalid characters with empty strings.
return Regex.Replace(strIn, @"[^\w\.@-]", "");
}

3.更改日期格式
以下代码示例使用 Regex.Replace 方法来用 dd-mm-yy 的日期形式代替 mm/dd/yy 的日期形式。

[C#]
String MDYToDMY(String input)
{
return Regex.Replace(input,
"\\b(?\\d{1,2})/(?\\d{1,2})/(?\\d{2,4})\\b",
"${day}-${month}-${year}");
}
Regex 
替换模式
本示例说明如何在 Regex.Replace 的替换模式中使用命名的反向引用。其中,替换表达式 ${day} 插入由 (?...) 组捕获的子字符串。

有几种静态函数使您可以在使用正则表达式操作时无需创建显式正则表达式对象,而 Regex.Replace 函数正是其中之一。如果您不想保留编译的正则表达式,这将给您带来方便。

4
//
替换
  public void Page1()
  {
   txtResult2.Text = "";
   try
   {
    Regex mRegex = new Regex(txtRegex2.Text);   
    txtResult2.Text = mRegex.Replace(txtStr2.Text,txtRegexRe.Text);
   }   
   catch(Exception e)
   {
    MessageBox.Show("
输入的正则式错误,请重新输入!","警告",MessageBoxButtons.OK,MessageBoxIcon.Information);
   }
  }

使用三:查找

//查找
  public void Page2()
  {
   txtResult1.Text = "";
   try
   {   
    Regex mRegex = new Regex(txtRegex1.Text);
    MatchCollection mMactchCol = mRegex.Matches(txtStr1.Text);
    foreach(Match mMatch in mMactchCol)
    {
     txtResult1.Text += string.Format("{0} 
在第{1}个字符被发现!\r\n",mMatch,mMatch.Index);
    }
    //
分割
    string[] sArray = mRegex.Split(txtStr1.Text);
    txtSplit.Text = "";
    foreach(string sLine in sArray)
    {
     txtSplit.Text += sLine+"\r\n";
    }
   }
   catch(Exception e)
   {
    MessageBox.Show("
输入的正则式错误,请重新输入!","警告",MessageBoxButtons.OK,MessageBoxIcon.Information);
   }
  }

 

常用正则表达式:

匹配中文字符的正则表达式: [\u4e00-\u9fa5]

匹配双字节字符(包括汉字在内)[^\x00-\xff]

应用:计算字符串的长度(一个双字节字符长度计2ASCII字符计1

String.prototype.len=function(){return this.replace([^\x00-\xff]/g,"aa").length;}

匹配空行的正则表达式:\n[\s| ]*\r

匹配HTML标记的正则表达式:/<(.*)>.*<\/\1>|<(.*) \/>/ 

匹配首尾空格的正则表达式:(^\s*)|(\s*$)

应用:javascript中没有像vbscript那样的trim函数,我们就可以利用这个表达式来实现,如下:

应用:javascript中没有像vbscript那样的trim函数,我们就可以利用这个表达式来实现,如下: 

String.prototype.trim = function()
{
    return this.replace(/(^\s*)|(\s*$)/g, "");
}

利用正则表达式分解和转换IP地址:

下面是利用正则表达式匹配IP地址,并将IP地址转换成对应数值的javascript程序:

function IP2V(ip)
{
 re=/(\d+)\.(\d+)\.(\d+)\.(\d+)/g  //
匹配IP地址的正则表达式
if(re.test(ip))
{
return RegExp.$1*Math.pow(255,3))+RegExp.$2*Math.pow(255,2))+RegExp.$3*255+RegExp.$4*1
}
else
{
 throw new Error("Not a valid IP address!")
}
}

不过上面的程序如果不用正则表达式,而直接用split函数来分解可能更简单,程序如下:

var ip="10.100.20.168"
ip=ip.split(".")
alert("IP
值是:"+(ip[0]*255*255*255+ip[1]*255*255+ip[2]*255+ip[3]*1))

匹配Email地址的正则表达式:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*

匹配网址URL的正则表达式:http://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?

 补充:
 ^\d+$
  //匹配非负整数(正整数 + 0
 ^[0-9]*[1-9][0-9]*$
  //匹配正整数
 ^((-\d+)|(0+))$
  //匹配非正整数(负整数 + 0
 ^-[0-9]*[1-9][0-9]*$
  //匹配负整数
 ^-?\d+$
    //匹配整数
 ^\d+(\.\d+)?$
  //匹配非负浮点数(正浮点数 + 0
 ^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$
  //匹配正浮点数
 ^((-\d+(\.\d+)?)|(0+(\.0+)?))$
  //匹配非正浮点数(负浮点数 + 0
 ^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$
  //匹配负浮点数
 ^(-?\d+)(\.\d+)?$
  //匹配浮点数
 ^[A-Za-z]+$
  //匹配由26个英文字母组成的字符串
 ^[A-Z]+$
  //匹配由26个英文字母的大写组成的字符串
 ^[a-z]+$
  //匹配由26个英文字母的小写组成的字符串
 ^[A-Za-z0-9]+$
  //匹配由数字和26个英文字母组成的字符串
 ^\w+$
  //匹配由数字、26个英文字母或者下划线组成的字符串
 ^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$
    //匹配email地址
 ^[a-zA-z]+://
匹配(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\S*)?$  //匹配url

链接的提取主要使用正则表达式,如下:
]+href=\s*(?:'(?[^'']+)'|""(?[^""]+)""|(?[^>\s]+))\s*[^>]*>

匹配网页中以htm为结尾的超链接
string ss ="(.*)"

正则式基础知识:

代表任意字符的正则表达式:(\w|\W)*

代表单行所有字符的正则表达式: (.*)

\s
代表任何空格字符:比如一个空格或者tab

\d
表示任何数字

5+
任意数目个字符5
(52)+7

[a-f] 
任何从'a''f'(小写)的单个字符

* 7*8
前一个字符/子表达式可以出现0次或多次-8/778
+ 7+8
前可出现1次或多次 -778
() 
分组
| 8|6
两个中的任何一个都匹配
[] 
匹配一组中的--[A-C]可以匹配A,B,C
[^] 
匹配的字符不在所给范围内 [^A-B]匹配A,B之外的任何
除换行以外的任何字符 .here匹配where there
\s 
任何空格字符
\S 
任何非空格字符
\d 
任何数字字符
\D 
任何非数字字符
\w 
任何""字符(字母,数字或下划线)
网页标签匹配 [\s\S]*?

你可能感兴趣的:(C#)