今天看了一天Asp.net 正则表达式,大概明白怎么了。
利用这个东西,我们可以分析文章中的Html,利用这个结果,方便以后寻找文件管理或者删除。代码可能不一定写得很好,请大家多提意见。
提取图片类型
返回是Html代码中的图片控件
/**//// <summary>
/// 返回是Html代码中的图片控件
/// </summary>
/// <param name="inputData">被提取的Html代码</param>
/// <returns></returns>
public static MatchCollection GetHtmlImg(string inputData)
{
Regex RegHtmlImg = new Regex("<img(.)*src=(.)*(.jpg|.gif|.png|.bmp|.jpeg)(.)*?>", RegexOptions.IgnoreCase);
return RegHtmlImg.Matches(inputData);
}
提取下载类型
返回下载控件类型
/**//// <summary>
/// 返回下载控件类型
/// </summary>
/// <param name="inputData">被提取的Html代码</param>
/// <param name="downtype">下载类型,类型存放在字符串数组中</param>
/// <returns></returns>
public static MatchCollection GetHtmlDownType(string inputData, string[] downtype)
{
string types = "";
for (int i = 0; i < downtype.Length; i++)
{
if (i == 0)
{
types = downtype[0];
}
else
{
types = "|" + downtype[i];
}
}
string pattern = "<a href=(.)*(" + types + ")(.)*?(</a>){1}";
Regex RegHtmlDown = new Regex(pattern, RegexOptions.IgnoreCase);//不区分大小写
return RegHtmlDown.Matches(inputData);
}
/**//// <summary>
/// 返回下载控件类型
/// </summary>
/// <param name="inputData">被提取的Html代码</param>
/// <param name="downtype">下载类型,类型存放在特定字符串中(ppt|doc|swf)</param>
/// <returns></returns>
public static MatchCollection GetHtmlDownType(string inputData, string downtype)
{
string pattern = "<a href=(.)*(" + downtype + ")(.)*?(</a>)";
Regex RegHtmlDown = new Regex(pattern, RegexOptions.IgnoreCase);//不区分大小写
return RegHtmlDown.Matches(inputData);
}
页面代码:
Code
<%@ Page Language="C#" AutoEventWireup="true" validateRequest="false" CodeBehind="1.aspx.cs" Inherits="Vs_2008学习范例.正则表达式._" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div style="text-align: center">
正则表达式</div>
<div>
<br />
<p>
<b>规则相符检测</b></p>
<p>
1验证的字符串
<asp:TextBox ID="txt_input2" runat="server" Width="686px"></asp:TextBox>
</p>
<p>
2验证规则
<asp:TextBox ID="txt_pattern" runat="server" Width="686px"></asp:TextBox>
</p>
<p>
3 结果
<asp:Label ID="lb_result" runat="server" ForeColor="#CC0000"></asp:Label>
</p>
<p>
4<asp:Button ID="Button2" runat="server" onclick="Button2_Click" Text="检测"
Width="127px" />
</p>
<p>
<b>规则字符提取</b></p>
1 验证的字符串:<asp:TextBox ID="txt_str" runat="server" Height="131px"
TextMode="MultiLine" Width="719px"></asp:TextBox>
</div>
<p>
2 验证规则:
<asp:TextBox ID="txt_RegExp" runat="server" Height="167px" TextMode="MultiLine"
Width="725px"></asp:TextBox>
</p>
<p>
3 验证结果:
<asp:ListBox ID="lb_list" runat="server" Width="740px"></asp:ListBox>
</p>
<p>
匹配总数:<asp:Label ID="lb_number" runat="server" Text="Label"></asp:Label>
</p>
<p>
</p>
<p>
4
<asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="提取"
Width="110px" />
<asp:Button ID="Button3" runat="server" onclick="Button3_Click" Text="提取图片类型"
Width="109px" />
<asp:Button ID="Button4" runat="server" onclick="Button4_Click" Text="提取下载类型"
Width="129px" />
</p>
</form>
</body>
</html>
后台代码:
Code
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Text.RegularExpressions;
namespace Vs_2008学习范例.正则表达式
{
public partial class _ : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Button1_Click(object sender, EventArgs e)
{
string InputString = txt_str.Text;
string str_RegExp = txt_RegExp.Text;
Regex regex = new Regex(str_RegExp,RegexOptions.IgnoreCase);
MatchCollection matchs = regex.Matches(InputString);
lb_list.Items.Clear();
foreach(Match m in matchs)
{
lb_list.Items.Add(new ListItem(m.Value));
}
lb_number.Text = matchs.Count.ToString();
}
protected void Button2_Click(object sender, EventArgs e)
{
string InputString = txt_input2.Text;
string pattern = txt_pattern.Text;
lb_result.Text = Regex.IsMatch(InputString, pattern).ToString();
}
protected void Button3_Click(object sender, EventArgs e)
{
string input = txt_str.Text;
MatchCollection matchs = Common.PageValidate.GetHtmlImg(input);
lb_list.Items.Clear();
foreach (Match m in matchs)
{
lb_list.Items.Add(new ListItem(m.Value));
}
lb_number.Text = matchs.Count.ToString();
}
protected void Button4_Click(object sender, EventArgs e)
{
string input = txt_str.Text;
MatchCollection matchs = Common.PageValidate.GetHtmlDownType(input,"doc|exe|rar|zip|ppt");
lb_list.Items.Clear();
foreach (Match m in matchs)
{
lb_list.Items.Add(new ListItem(m.Value));
}
lb_number.Text = matchs.Count.ToString();
}
}
}
附正则表达式的限定符
正则表达式
一 限定符:
描述:允许特定字符或字符集自身重复出现的次数,作用范围是限制符左边第一个字符或者字符集
符号 |
作用 |
范例 |
* |
允许特定字符 >= 0 次 |
Fo* (x,y代表任意字符)符合:
xFy xFoy xFooy |
+ |
允许特定字符 >= 1 次 |
Fo+ (x,y代表任意字符)符合:
xFoy xFooy |
? |
允许特定字符 0 或 1次 |
Fo? (x,y代表任意字符)符合:
xFy xFoy xFooy |
{} |
显式限定符使用花括号 {} 及其中的数字值表示模式出现次数的上下限 |
ab{2}c (x,y代表任意字符)符合:
xabbcy |
|
{2,} 允许特定字符>=2 |
ab{2,}c (x,y代表任意字符)符合:
xbbcy xbbbbcy xbbb..bbcy |
|
{0,2}
0<=允许特定符号<=2
注意:{,2}写法有问题 |
ab{0,2}c (x,y代表任意字符)符合:
xacy xabcy xabbcy |
. |
.
可匹配任何单字符 |
匹配任意字符,(空字符除外)
|
^ |
指定字符串(或行)的开始
作用范围在右边 |
^C (x,y代表任意字符)符合:
Cx xCy(不符合) |
$ |
使用 $ 元字符可指定字符串(或行)的结束 |
W$ (x,y代表任意字符)符合:
xW xWy(不符合) |
\ |
寻找\号的时候,必须使用反斜杠进行“转义” |
\\ (x,y代表任意字符)符合:
x\y |
| |
指定“此或彼 |
a|b (x,y代表任意字符)符合:
xay xby |
( ) |
模式分组 |
(abc){2,3} (x,y代表任意字符)符合:
xabcabcy xabcabcabcy |
[ ] |
① 它只能使用一个字符,有多个字符的时候,代表任意一个
② 正则表达式元字符在字符类中不做特殊处理,所以这些元字符不需要转义
③ - 连字符,在字符类中有特殊的含义字符。在(例如)ASCII 或 Unicode 表中出现的顺序确定了在范围中包括的字符 |
|
特殊转意符号 |
|
|
一般字符 |
除 .$ ^ { [ ( | ) * + ? \ 外,其他字符与自身匹配。 |
\a |
与响铃(警报)\u0007 匹配。 |
\b |
在正则表达式中,\b 表示单词边界(在 \w 和 \W 之间),不过,在 [] 字符类中,\b 表示退格符。在替换模式中,\b 始终表示退格符。 |
\t |
与 Tab 符 \u0009 匹配。 |
\r |
与回车符 \u000D 匹配。 |
\v |
与垂直 Tab 符 \u000B 匹配。 |
\f |
与换页符 \u000C 匹配。 |
\n |
与换行符 \u000A 匹配。 |
\e |
与 Esc 符 \u001B 匹配。 |
\040 |
将 ASCII 字符匹配为八进制数(最多三位);如果没有前导零的数字只有一位数或者与捕获组号相对应,则该数字为后向引用。例如,字符 \040 表示空格。 |
\x20 |
使用十六进制表示形式(恰好两位)与 ASCII 字符匹配。 |
\cC |
与 ASCII 控制字符匹配;例如,\cC 为 Ctrl-C。 |
\u0020 |
使用十六进制表示形式(恰好四位)与 Unicode 字符匹配。 |
\ |
在后面带有不识别为转义符的字符时,与该字符匹配。例如,\* 与 \x2A 相同。 |
字符类 |
说明 |
. |
匹配除 \n 以外的任何字符。如果已用 Singleline 选项做过修改,则句点字符可与任何字符匹配。 |
[ aeiou ] |
与指定字符集中包含的任何单个字符匹配。 |
[^ aeiou ] |
与不在指定字符集中的任何单个字符匹配。 |
[0-9a-fA-F] |
使用连字号 (–) 允许指定连续字符范围。 |
\p{ name } |
与 {name} 指定的命名字符类中的任何字符都匹配。支持的名称为 Unicode 组和块范围。例如,Ll、Nd、Z、IsGreek、IsBoxDrawing。可以使用 GetUnicodeCategory 方法找到某个字符所属的 Unicode 类别。 |
\P{ name } |
与在 {name} 中指定的组和块范围不包括的文本匹配。 |
\w |
与任何单词字符匹配。等效于 Unicode 字符类别 [\p{Ll}\p{Lu}\p{Lt}\p{Lo}\p{Nd}\p{Pc}\p{Lm}]。如果用 ECMAScript 选项指定了符合 ECMAScript 的行为,则 \w 等效于 [a-zA-Z_0-9]。 |
\W |
与任何非单词字符匹配。等效于 Unicode 字符类别 [^\p{Ll}\p{Lu}\p{Lt}\p{Lo}\p{Nd}\p{Pc}\p{Lm}]。如果用 ECMAScript 选项指定了符合 ECMAScript 的行为,则 \W 等效于 [^a-zA-Z_0-9]。 |
\s |
与任何空白字符匹配。等效于 Unicode 字符类别 [\f\n\r\t\v\x85\p{Z}]。如果用 ECMAScript 选项指定了符合 ECMAScript 的行为,则 \s 等效于 [ \f\n\r\t\v]。 |
\S |
与任何非空白字符匹配。等效于 Unicode 字符类别 [^\f\n\r\t\v\x85\p{Z}]。如果用 ECMAScript 选项指定了符合 ECMAScript 的行为,则 \S 等效于 [^ \f\n\r\t\v]。 |
\d |
与任何十进制数字匹配。对于 Unicode 类别的 ECMAScript 行为,等效于 \p{Nd},对于非 Unicode 类别的 ECMAScript 行为,等效于 [0-9]。 |
\D |
与任何非数字匹配。对于 Unicode 类别的 ECMAScript 行为,等效于 \P{Nd},对于非 Unicode 类别的 ECMAScript 行为,等效于 [^0-9]。 |
断言 |
说明 |
^ |
指定匹配必须出现在字符串的开头或行的开头。。 |
$ |
指定匹配必须出现在以下位置:字符串结尾、字符串结尾处的 \n 之前或行的结尾。 |
\A |
指定匹配必须出现在字符串的开头(忽略 Multiline 选项)。 |
\Z |
指定匹配必须出现在字符串的结尾或字符串结尾处的 \n 之前(忽略 Multiline 选项)。 |
\z |
指定匹配必须出现在字符串的结尾(忽略 Multiline 选项)。 |
\G |
指定匹配必须出现在上一个匹配结束的地方。与 Match.NextMatch() 一起使用时,此断言确保所有匹配都是连续的。 |
\b |
指定匹配必须出现在 \w(字母数字)和 \W(非字母数字)字符之间的边界上。匹配必须出现在单词边界上,即出现在由任何非字母数字字符分隔的单词中第一个或最后一个字符上。 |
\B |
指定匹配不得出现在 \b 边界上。 |
限定符 |
说明 |
* |
指定零个或更多个匹配;例如 \w* 或 (abc)*。等效于 {0,}。 |
+ |
指定一个或多个匹配;例如 \w+ 或 (abc)+。等效于 {1,}。 |
? |
指定零个或一个匹配;例如 \w? 或 (abc)?。等效于 {0,1}。 |
{ n } |
指定恰好 n 个匹配;例如 (pizza){2}。 |
{ n ,} |
指定至少 n 个匹配;例如 (abc){2,}。 |
{ n , m } |
指定至少 n 个但不多于 m 个匹配。 |
*? |
指定尽可能少地使用重复的第一个匹配(等效于 lazy *)。 |
+? |
指定尽可能少地使用重复但至少使用一次(等效于 lazy +)。 |
?? |
指定使用零次重复(如有可能)或一次重复 (lazy ?)。 |
{ n }? |
等效于 {n} (lazy {n})。 |
{ n ,}? |
指定尽可能少地使用重复但至少使用 n 次 (lazy {n,})。 |
{ n , m }? |
指定介于 n 次和 m 次之间、尽可能少地使用重复 (lazy {n,m})。 |