- 浏览: 367368 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (225)
- java (76)
- English (2)
- office (2)
- 架构设计 (1)
- 人在职场 (3)
- database (21)
- C# (18)
- 向往的院校 (0)
- C++ (1)
- AJAX (1)
- 操作系统 (8)
- eclipse (1)
- Spring (0)
- Linux (1)
- Javascript (6)
- 离散 (0)
- 协议 (1)
- sql server (5)
- sql server (0)
- fdf (0)
- xml (1)
- sql语句里top和distinct一起用 (1)
- 正则表达式 (7)
- 表达 (1)
- ms server (1)
- SWFObject (0)
- 线程 (2)
- Java线程 (0)
- Android & SQLite (0)
- Android (0)
- window.XMLHttpRequest (0)
- DB pool (0)
- tomcat内存溢出设置JAVA_OPTS (1)
- java bcp (1)
- 文件系统转换 (1)
- Microsoft XMLDom (1)
- tree (0)
- C# installer (0)
- 对付http cc攻击 (0)
- Ckeditor (0)
- MyEclipse (0)
- PDM (0)
- PDM OOM (0)
- asp.net (0)
- tomcat (1)
- Tomcat session (1)
- jdk (0)
- Bootstrap (0)
最新评论
-
kenail:
格式太乱了。
转 使用WebService压缩传输的心得 -
存在即为合理:
写得好乱,但是还是谢谢你的驱动
JDBC连接SQL server 2005 驱动 -
guji528:
长见识了,谢谢分享!
TL1协议(正文信息收集整理来源Internet) -
王大人:
Js window confirm()方法及其使用 -
Eastman:
SqlServer附加数据库出错,错误代码5123
1 概述
初学正则时,对于 Regex 类不熟悉,遇到问题不知道该用哪种方法解决,本文结合一些正则应用的典型应用场景,介绍一下 Regex 类的基本应用。这里重点进行 .NET 类的介绍,对于正则的运用,不做深入探讨。
正则的应用最终都是进行模式的匹配,而根据目的的不同,基本上可以分为以下几种应用:验证、提取、替换、分割。结合 .NET 提供的控件、类以及类的方法,可以很方便的实现这些应用。
以下将结合一些典型的应用场景,对 .NET 中常见的类、方法及属性进行介绍。本文旨在 .NET 类基础用法的引导,对于其中涉及到的正则表达式不做深入探讨。本文适合于在 .NET 平台下使用正则的初学者。
2 基础应用
2.1 验证
验证的目的是为了判断输入的源字符串是否符合某一规律或规则,根据需求的不同,可能是校验整个源字符串,也可能只是校验其中一个子串。
验证在 .NET 中一般有两种应用,一种是在验证控件 RegularExpressionValidator 中,另一种是在程序中。
2.1.1 验证控件 RegularExpressionValidator
RegularExpressionValidator 是 .NET 自带的一种客户端验证控件,通过简单的设置,即可完成对某控件输入值的校验。
基本应用语法如下:
< asp : RegularExpressionValidator
ID ="RegularExpressionValidator1"
runat ="server"
ControlToValidate ="TextBox1"
ErrorMessage ="RegularExpressionValidator"
ValidationExpression ="^([1-9][0-9]*|0)(/.[0-9][2])?$">
</ asp : RegularExpressionValidator >
对于 RegularExpressionValidator 控件不做过多介绍,只是说明一下使用时需要注意的几点:
1、 RegularExpressionValidator 进行的是客户端验证;
2、 RegularExpressionValidator 中正则使用的是 JavaScript 语法规则;
3、 RegularExpressionValidator 控件不能验证输入是否为空。
由于 RegularExpressionValidator 做的是客户端验证,很容易被跳过,所以在使用 RegularExpressionValidator 验证的同时,还要做服务器端验证。
RegularExpressionValidator 最终是要生成客户端的 JavaScript 代码进行验证的,所以 RegularExpressionValidator 使用的正则要求符合 JavaScript 语法规则,与 .NET 的几点区别:
1、 不支持逆序环视,也就是 (?<=Expression) 和 (?<!Expression) 这样的语法;
2、 元字符仅支持 ASCII 码,即 /w 等价于 [a-zA-Z0-9_] , /d 等价于 [0-9]
RegularExpressionValidator 控件一般是用来验证某一控件输入的字符串整体是否符合某一规则的,所以通常情况下“ ^ ”和“ $ ”是必不可少的;在使用“ | ”表示“或”的关系时,一定要用“ () ”来限定“ | ”作用范围,比如 0-100 可以写作“ ^([1-9]?[0-9]|100)$ ”。
RegularExpressionValidator 是不能验证输入是否为空的,验证是否为空要用 RequiredFieldValidator 控件。
RegularExpressionValidator 验证控件是 .NET 为方便客户端验证封装的一组验证控件之一,但由于 RegularExpressionValidator 受限于支持的正则语法规则,只能做有限的格式校验,一些复杂的校验可以通过自己写 JavaScript 代码来实现,也是很简单的。
2.1.2 程序验证—— IsMatch()
程序中的校验基本上就是使用 IsMatch 方法,验证的对象可能是源字符串的整体,也可能只是其中一个子串。
验证源字符串的整体是否符合某一规则,与使用 RegularExpressionValidator 时的需求基本上一致,不过由于是在 .NET 程序中,所以使用的是 .NET 的语法,比 JavaScript 中要强大得多。比如验证一个文本框输入的字符串是否符合某一规则,就是一个典型的验证整体的需求。
举例 1 :验证 textBox1 输入内容,要求整数部分为 0 或正整数,小数可有可无,有小数时必须为 2 位。
Regex reg = new Regex (@"^(?:[1-9][0-9]*|0)(?:/.[0-9]{2})?$" );
if (reg.IsMatch(textBox1.Text))
{
richTextBox2.Text = " 输入格式正确!" ;
}
else
{
richTextBox2.Text = " 输入格式错误!" ;
}
由于是对源字符串的整体进行验证,所以“ ^ ”和“ $ ”是必不可少的。否则验证的结果可能是错误的,比如正则表达式“ (?:[1-9][0-9]*|0)(?:/.[0-9]{2})? ”,在输入“ 0.123 ”时是可以匹配成功的,匹配结果为“ 0.12 ”,此时正则只起到了匹配的作用,没有起到验证的作用。
验证源字符串的局部是否符合某一规则,就是对于源字符串中子串的校验,通常是用来判断源字符串中是否包含,或是不包含符合某一规律的子串,作用类似于 string 类中的 IndexOf 。
举例 2 (参考 问两个正则表达式 ):
数据 :
1985aaa1985bb
bcae1958fiefadf1955fef
atijc1944cvkd
df2564isdjfef2564d
abc1234def5678ghi5678jkl
需求 1 :验证字符串中任意位置出现的连续四个数字在整个字符串中是否有重复,有重复为 True ,无重复为 False 。
以上数据需求 1 的验证结果为 True 的应为:
1985aaa1985bb
df2564isdjfef2564d
abc1234def5678ghi5678jkl
因为需求中指明是任意位置的连续 4 个数字是否有重复,所以在找到重复前,要遍历源字符串中每一个位置时行验证,这样就不能限定开始标识符“ ^ ”;而在匹配过程中,除非一直到结尾仍找不到重复,否则只要匹配到有重复的位置就可以了,这样也不需要结束标识符“ $ ”,所以这是典型的对字符串的子串行验证的需求。
代码实现:
string [] test = new string [] { "1985aaa1985bb" , "bcae1958fiefadf1955fef" , "atijc1944cvkd" , "df2564isdjfef2564d" , "abc1234def5678ghi5678jkl" };
Regex reg = new Regex (@"(/d{4})(?:(?!/1).)*/1" );
foreach (string s in test)
{
richTextBox2.Text += " 源字符串: " + s.PadRight(25, ' ' ) + " 验证结果: " + reg.IsMatch(s) + "/n" ;
}
/*-------- 输出--------
源字符串: 1985aaa1985bb 验证结果: True
源字符串: bcae1958fiefadf1955fef 验证结果: False
源字符串: atijc1944cvkd 验证结果: False
源字符串: df2564isdjfef2564d 验证结果: True
源字符串: abc1234def5678ghi5678jkl 验证结果: True
*/
由于涉及到了重复问题,所以这里用到了反向引用,对于反向引用的细节,可以参考 正则基础之——反向引用 。
需求 2 :验证字符串中第一个出现的连续 4 个数字是否有重复,有重复为 True ,无重复为 False 。
以上数据需求 2 的验证结果为 True 的应为:
1985aaa1985bb
df2564isdjfef2564d
因为需求中指明是第一个是否有重复,所以需要有开始标识符“ ^ ”,来保证是第一个出现的连续 4 个数字;而在匹配过程中,除非一直到结尾仍找不到重复,否则只要匹配到有重复的位置就可以了,这样也不需要结束标识符“ $ ”,所以这仍是对字符串的子串行验证的需求,只不过相对于需求 1 来说,加了一个限定条件。
代码实现:
string [] test = new string [] { "1985aaa1985bb" , "bcae1958fiefadf1955fef" , "atijc1944cvkd" , "df2564isdjfef2564d" , "abc1234def5678ghi5678jkl" };
Regex reg = new Regex (@"^(?:(?!/d{4}).)*(/d{4})(?:(?!/1).)*/1" );
foreach (string s in test)
{
richTextBox2.Text += " 源字符串: " + s.PadRight(25, ' ' ) + " 验证结果: " + reg.IsMatch(s) + "/n" ;
}
/*-------- 输出--------
源字符串: 1985aaa1985bb 验证结果: True
源字符串: bcae1958fiefadf1955fef 验证结果: False
源字符串: atijc1944cvkd 验证结果: False
源字符串: df2564isdjfef2564d 验证结果: True
源字符串: abc1234def5678ghi5678jkl 验证结果: False
*/
2.2 提取—— Match() 、 Matches()
提取主要是从源字符串中,取得一个或多个符合某一规律或规则的子串。一般来说,在字符串处理中,提取应用比较广泛。提取时用得比较多的是 Match() 和 Matches() 方法,以及结果处理时 Match 类和 MatchCollection 类的一些方法,有时也会用到 Capture 类的一些方法。
2.2.1 提取单次匹配内容—— Match()
当需要提取的内容只有一个,或是只需要获取第一次成功匹配的内容时,可以使用 Match() 方法。当使用 Match() 方法时,只要在某一位置匹配成功,就不再继续尝试匹配,并返回一个 Match 类型的对象。
举例 :提取姓名
源字符串:姓名:张三,性别:男,年龄: 25
代码实现:
string test = " 姓名:张三,性别:男,年龄:25" ;
Regex reg = new Regex (@"(?<= 姓名:)[^ ,]+" );
Match m = reg.Match(test);
if (m.Success) // 验证是否匹配成功
{
richTextBox2.Text = m.Value;
}
/*-------- 输出--------
张三
*/
虽然 Match() 只是取一次匹配,但是可以通过捕获组来获取多个指定子串,比如获取第一个 <a…> 标签的链接和文本。
string test = "abc<a href=/"www.test1.com/"> 测试一</a>def<a href=/"www.test2.com/"> 测试二</a>ghi" ;
Regex reg = new Regex (@"(?is)<a(?:(?!href=).)href=(['""]?)(?<url>[^""/s>]*)/1[^>]*>(?<text>(?:(?!</?a/b).)*)</a>" );
Match m = reg.Match(test);
if (m.Success)
{
richTextBox2.Text += m.Groups["url" ].Value + "/n" ; // 链接
richTextBox2.Text += m.Groups["text" ].Value + "/n" ; // 文本
}
/*-------- 输出--------
www.test1.com
测试一
*/
对于捕获组捕获结果的引用,还有一种方式
string test = "abc<a href=/"www.test1.com/"> 测试一</a>def<a href=/"www.test2.com/"> 测试二</a>ghi" ;
Regex reg = new Regex (@"(?is)<a(?:(?!href=).)href=(['""]?)(?<url>[^""/s>]*)/1[^>]*>(?<text>(?:(?!</?a/b).)*)</a>" ); Match m = reg.Match(test);
if (m.Success)
{
richTextBox2.Text += m.Result("${url}" ) + "/n" ; // 链接
richTextBox2.Text += m.Result("${text}" ) + "/n" ; // 文本
}
/*-------- 输出--------
www.test1.com
测试一
*/
这两种方法获取的结果都是一样的,使用哪一种,通常根据个人习惯而定。
2.2.2 提取多次匹配内容—— Matches()
当需要提取的内容有多个,并且需要提取所有符合规律的子串时,可以使用 Matches() 方法。当使用 Matches() 方法时,需要遍历源字符串的每一个位置进行尝试匹配,匹配结束返回一个 MatchCollection 类型的对象。
对于 1.2.1 节提到的提取链接和文本的例子,如果提取的是全部链接和文本,而不仅仅是第一个时,可以使用 Matches() 方法。
string test = "abc<a href=/"www.test1.com/"> 测试一</a>def<a href=/"www.test2.com/"> 测试二</a>ghi" ;
Regex reg = new Regex (@"(?is)<a(?:(?!href=).)href=(['""]?)(?<url>[^""/s>]*)/1[^>]*>(?<text>(?:(?!</?a/b).)*)</a>" );
MatchCollection mc = reg.Matches(test);
foreach (Match m in mc)
{
richTextBox2.Text += m.Groups["url" ].Value + "/n" ; // 链接
richTextBox2.Text += m.Groups["text" ].Value + "/n" ; // 文本
}
/*-------- 输出--------
www.test1.com
测试一
www.test2.com
测试二
*/
对于 Matches() ,某些场景下,也可以通过 Count 属性,用做统计符合某一规律的子串出现的次数,例如统计字符串中独立的“ 3 ”出现的次数。
string test = "137,1,33,4,3,6,21,3,35,93,2,98" ;
Regex reg = new Regex (@"/b3/b" );
int count = reg .Matches(test).Count; //2
这时候关心的只是匹配成功的次数,对于匹配的内容是不关心的,所以实现这种需求时,正则应尽量简洁,能达到目的即可,这样可以加快匹配效率,减少资源占用。比如上面的提取链接的源字符串中,统计 <a…> 标签出现的次数,一般来说,如下代码即可达到目的了。
string test = "abc<a href=/"www.test1.com/"> 测试一</a>def<a href=/"www.test2.com/"> 测试二</a>ghi" ;
Regex reg = new Regex (@"(?i)<a/b" );
int count = reg.Matches(test).Count; //2
2.2.3 捕获组匹配过程集合—— Capture
在某些情况下,一个正则表达式整体匹配一次时,其中的捕获组可能会匹配多次。
举例 :
源字符串: <region name=oldslist col=1 row=2 order=asc>abcsadf </region> jfdsajf <region name=newslist class=list col=4 row=10 order=desc>abcsadf </region>
需求:提取出每个 region 的属性和属性值,按 region 分组。
对于这个需求,可以先提取出所有 region ,再对每个 region 标签提取它的属性和属性值,但这样做比较麻烦,可以考虑在一个正则表达式中提取。由于属性的个数是不固定的,所以不能用固定个数的量词来匹配属性对,正则可以写为
(?is)<region/s+(?:(?<key>[^/s=]+)=(?<value>[^/s>]+)/s*)+>
此时如果还用 Groups 来取匹配结果时,由于 Groups 只保留最后一次匹配结果,所以只能取到最后一次匹配成功的子串。这时就要用到 Captures 属性。
string test = "<region name=oldslist col=1 row=2 order=asc>abcsadf </region> jfdsajf <region name=newslist class=list col=4 row=10 order=desc>abcsadf </region>" ;
MatchCollection mc = Regex .Matches(test, @"(?is)<region/s+(?:(?<key>[^/s=]+)=(?<value>[^/s>]+)/s*)+>" );
for (int i = 0; i < mc.Count; i++)
{
richTextBox2.Text += " 第" + (i + 1) + " 个region 的属性:/n" ;
for (int j = 0; j < mc[i].Groups["key" ].Captures.Count; j++)
{
richTextBox2.Text += " 属性: " + mc[i].Groups["key" ].Captures[j].Value.PadRight(10, ' ' ) + " 值: " + mc[i].Groups["value" ].Captures[j].Value + "/n" ;
}
richTextBox2.Text += "/n" ;
}
/*-------- 输出--------
第1 个region 的属性:
属性: name 值: oldslist
属性: col 值: 1
属性: row 值: 2
属性: order 值: asc
第2 个region 的属性:
属性: name 值: newslist
属性: class 值: list
属性: col 值: 4
属性: row 值: 10
属性: order 值: desc
*/
Group 实际上是 Capture 的一个集合,在捕获组只匹配一个子串时,这个集合只有一个元素,而在捕获组先后匹配多个子串时, Groups[i].Value 只保留最后一个匹配结果,而 Capture 集合却可以记录匹配过程中匹配到的所有子串。
Capture 的应用场景并不多,对于上面的例子,如果不使用 Capture ,可以通过分次匹配的方式实现,但是在一些复杂的表达式中,很难进行分次匹配,这时 Capture 就比较有用了。
2.3 替换
替换主要是从源字符串中,将符合某一规律或规则的子串替换为其它内容。一般来说,在字符串处理中,替换应用也比较广泛。替换主要是用 Replace() 方法,在一些替换规则复杂的应用场景中,也可能会用到委托方法。
2.3.1 一般替换
替换的目的很明确,只要找出待替换子串的规律,替换为目标子串就可以了。
举例 1 :
源字符串: <img src="/imgs/logo.jpg"> abc <img src="http://www.test.com/imgs/top.gif">
需求:将相对地址替换为绝对地址,已经是绝对地址的不替换。
string test = "<img src=/"/imgs/logo.jpg/"> abc <img src=/"http://www.test.com/imgs/top.gif/">" ;
Regex reg = new Regex (@"(?i)(?<=src=(['""]?))(?!http://)(?=[^'""/s>]+/1)" );
string result = reg.Replace(test, "http://www.test.com" );
/*-------- 输出--------
<img src="http://www.test.com/imgs/logo.jpg"> abc <img src="http://www.test.com/imgs/top.gif">
*/
这里需要说明的是,在 .NET 中只提供了一个 Replace() 方法,没有提供类似于 Java 中的 replaceAll() 和 replaceFirst() 两种方法,所以如果在 .NET 中只替换第一次出现的符合规律的子串时,需要在正则表达式中处理。
举例 2 :
源字符串: abc123def123ghi
需求:将第一次出现的“ 123 ”替换为空,其余位置不替换。
string test = "abc123def123ghi" ;
Regex reg = new Regex (@"(?s)^((?:(?!123).)*)123" );
string result = reg.Replace(test, "$1" );
/*-------- 输出--------
abcdef123ghi
*/
这时用“ ^ ”限定只替换第一次出现的子串,由于绝大多数正则引擎都对“ ^ ”进行了优化,所以正则表达式在位置 0 处匹配成功或失败后,将不再对其它位置进行尝试匹配。
2.3.2 替换中的委托方法应用
对于一些比较复杂的替换规则,可能会用到委托方法,由于这种应用属于比较典型的一种应用,所以将在后面的文章中单独进行介绍。
2.4 分割
分割就是用符合某一规律的子串,将源字符串分割成一个数组,主要用到的是 Split() 方法。由于 Regex 的 Split() 方法中,并没有提供类似于 string 的 Split() 方法的 StringSplitOptions.RemoveEmptyEntries 参数,而如果符合规律的子串出现在开头或结尾时,会出现不需要的空串,这时需要在正则表达式中进行一下处理。
举例 1 :
源字符串: 汉字123 文字english
需求:按英文单词和非英文单词进行分割(英文单词包括由 a-z,A-Z,0-9,_ 组成的子串)。
string str = " 汉字123 文字english" ;
string [] result = Regex .Split(str, @"(?<!^)/b(?!$)" , RegexOptions .ECMAScript);
foreach (string s in result)
{
richTextBox2.Text += s + "/n" ;
}
/*-------- 输出--------
汉字
123
文字
English
*/
这里分别用“ (?<!^) ”和“ (?!$) ”来限定不以开头或结尾的子串进行分割,结果中也就不会出现不必要的空串了。
还有一些应用,其实可以算作是正则就用技巧范畴的了。
举例 2 :
源字符串: Left( 姓名,1),Left( 姓名,1) , Left ( 姓名,1)
需求:以不在“ () ”内的“ , ”进行分割。
string test = "Left( 姓名,1),Left( 姓名,1) , Left ( 姓名,1)" ;
Regex reg = new Regex (@"(?<!/([^)]*),(?![^(]*/))" );
string [] sArray = reg.Split(test);
foreach (string s in sArray)
{
richTextBox2.Text += s + "/n" ;
}
/*-------- 输出--------
Left( 姓名,1)
Left( 姓名,1)
Left ( 姓名,1)
*/
使用正则的 Split() 方法时,有一点需求注意,那就是如果正则中出现了捕获组,那么捕获组匹配到的内容也会保存到分割结果中。
以下举例不做详细说明,看下结果基本上就明白了。
string test = "aa11<bbb>cc22<ddd>ee" ;
string [] temp = Regex .Split(test, @"[0-9]+(<[^>]*>)" );
foreach (string s in temp)
{
richTextBox2.Text += s + "/n" ;
}
/*-------- 输出--------
aa
<bbb>
cc
<ddd>
ee
*/
如果不想把捕获组匹配到的内容也存入结果,可以使用非捕获组。
string test = "aa11<bbb>cc22<ddd>ee" ;
string [] temp = Regex .Split(test, @"[0-9]+(?:<[^>]*>)" );
foreach (string s in temp)
{
richTextBox2.Text += s + "/n" ;
}
/*-------- 输出--------
aa
cc
ee
*/
3 扩展应用
这里介绍一些可能涉及到的一些 .NET 中的正则扩展应用。
3.1 动态生成正则时的转义—— Escape()
有时需要根据一些变量动态生成正则表达式,这时如果变量中含有正则中的元字符,会被解析成元字符,就可能会导致正则编译不通过,从而导致程序异常,需要对变量进行转义处理。 Regex. Escape() 方法 通过替换为转义码来转义最小的字符集( / 、 * 、 + 、 ? 、 | 、 { 、 [ 、 ( 、 ) 、 ^ 、 $ 、 . 、 # 和空白)。
比如根据用户输入的 id 取相应的 div 标签, id 中没有元字符时,可以取得正确结果。
string test = "<div id=/"test1/">abc</div><div id=/"test2/">def</div>" ;
string [] ids = new string [] { "test1" , "test2" };
foreach (string id in ids)
{
Regex reg = new Regex (@"(?is)<div/s+id=""" + id + @"""[^>]*>(?:(?!</?div/b).)*</div>" );
MatchCollection mc = reg.Matches(test);
foreach (Match m in mc)
{
richTextBox2.Text += m.Value + "/n" ;
}
}
/*-------- 输出--------
<div id="test1">abc</div>
<div id="test2">def</div>
*/
但是如果输入的 id 中一旦出现未经转义的元字符,如“ abc( ”,就会抛类似于下面的异常。
正在分析“ (?is)<div/s+id="abc("[^>]*>(?:(?!</?div/b).)*</div> ”- ) 不足。
此时可以用 Escape() 方法对输入的变量进行转义处理。
string test = "<div id=/"test1/">abc</div><div id=/"test2/">def</div>" ;
string [] ids = new string [] { "test1" , "test2" , "abc(" };
foreach (string id in ids)
{
Regex reg = new Regex (@"(?is)<div/s+id=""" + Regex .Escape(id) + @"""[^>]*>(?:(?!</?div/b).)*</div>" );
MatchCollection mc = reg.Matches(test);
foreach (Match m in mc)
{
richTextBox2.Text += m.Value + "/n" ;
}
}
/*-------- 输出--------
<div id="test1">abc</div>
<div id="test2">def</div>
*/
使用 Escape() 方法转义后, 就可以得到正确的结果,而不会抛异常了。
3.2 静态方法
.NET 中一些 Regex 类的常见方法都提供了相应的静态方法,可以不显式的声明 Regex 对象,而直接调用相应的方法,书写起来更方便,代码更简洁、易读。
比如替换 IP 地址最后一节为“ * ”,只需一行代码。
string result = Regex .Replace("10.27.123.12" , @"/d+$" , "*" ); //10.27.123.*
静态方法每次调用都会创建一个临时的 Regex 对象,使用之后释放,所以每次调用静态方法时,都会重新编译,而这将会降低执行效率。因此在循环或是频繁调用的方法中,不适合使用静态方法,而需要进行显式声明 Regex 对象。
但是对于一些只调用一次,或是对执行效率没有要求的场景下,静态方法则是很不错的选择。
发表评论
-
使用System.Net.Mail实现邮件群发
2016-06-27 16:05 0本文介绍了使用命名空间System.Net.Mail下的M ... -
windows 8上使用SmtpClient.Send()发送邮件失败的原因分析
2016-06-22 17:05 0更新内容。 最终的问题还是SMTP服务器不正确引起的,而非 ... -
一个大家不常用到,却很有用的页面间传值方法(Context.Handler) .
2015-12-16 16:35 0一、目前在ASP.NET中页面传值共有这么几种方式:1 ... -
如何在asp.net把表单提交到另一页
2015-09-11 14:47 0在ASP.NET中,每一个asp ... -
如何修改windows 2008 IIS 的.net版本[解决]
2015-07-24 11:30 0我要win2008 server r2上 IIS上发布 II ... -
TreeView控件学习
2015-05-29 14:06 0这几天上班没事做,也不好打酱油,学点没接触过的新东西吧,基 ... -
asp:Repeater中实现隔行换色
2015-04-14 10:39 0<asp:Repeater ID="Repe ... -
使用PowerDesigner进行代码生成 .
2015-01-08 10:13 0很多代码生成器都选择了从表结构来生成领域模型,这样的方案有 ... -
Asp.net中GridView使用详解
2014-10-07 04:12 0Asp.net中GridView使用详解 效果图参考:htt ... -
虚拟路径“ascx”映射到另一个应用程序,这是不允许的。
2014-08-31 19:50 0解决办法: 1.进入IIS,找到当前网站的虚拟目录,然后在该 ... -
C# 将图片通过FileUpload空间上传,用实现Image预览
2014-08-27 17:58 0小 订阅 <style type="text ... -
ASP.NET防止SQL注入函数
2014-08-22 05:49 0using System; using System.Text ... -
ASP.NET防止Sql注入的解决方法【转】
2014-08-22 05:44 0ASP.NET防止Sql注入,通常一个一个文件修改不仅麻烦而 ... -
解决MVS的WEBAPP安装部署制作的安装程序不能选择目录的问题
2014-06-16 10:34 0解决Microsoft Visual Studio .NE ... -
VS2008 SP1 如何設定讓 .NET 3.5 SP1 內嵌於 Setup 專案內
2014-06-12 12:55 0這兩天都在弄一個 Windows Setup 專案,希 ... -
DirectoryEntry.Properties遍历IIS属性
2014-06-10 16:21 0一.平台:Windows XP SP3+ IIS 5.1 + ... -
aspx.cs获取html 非服务器控件的值
2014-04-08 12:10 0设置name属性,在后台使用Request[&quo ... -
[转]ASP.NET的事件模型
2014-04-03 10:10 0当我们新建一个ASP.NET的应用程序时,会默认生成一个De ... -
[转]C#代码与javaScript函数的相互调用
2014-03-28 11:16 471C#代码与javaScript函数的相互调用 问: 1.如 ... -
在C#中使用NPOI2.0操作Excel2003和Excel2007
2013-12-23 11:00 0在C#中使用NPOI2.0操作Excel2003和Excel2 ...
相关推荐
asp.net利用正则在HTML中提取图片路径(asp.net正则表达式过滤出HTML代码中图片路径).txtasp.net利用正则在HTML中提取图片路径(asp.net正则表达式过滤出HTML代码中图片路径).txt
asp.net正则匹配特定汉字匹配格式为2012年第001期(总第001期)asp.net正则匹配特定汉字匹配格式为2012年第001期(总第001期)asp.net正则匹配特定汉字匹配格式为2012年第001期(总第001期)asp.net正则匹配特定汉字匹配...
vb.net例子-正则-取函数 vb.net例子-正则-取函数 vb.net例子-正则-取函数
非常齐全的asp.net的正则表达式应用
asp.net 正则表达式过滤所有html标签 asp.net 正则表达式过滤所有html标签 asp.net 正则表达式过滤所有html标签 asp.net 正则表达式过滤所有html标签 asp.net 正则表达式过滤所有html标签
30分钟搞定.net正则表达式.doc,入门介绍与查询手册
正则获取 正则获取所有 正则替换 正则截取等等一些方法封装,直接调用就可以了
Asp.net 正则表达式 正则 正则表达式 正则表达式下载 正则下载 Asp.net 正则表达式下载
DotNet正则表达式测试工具,基于.net1.1开发,vista以上操作系统绿色免安装。 用于编写正则表达式时进行测试,支持正则选项(是否忽略大小写、是否多行模式)、支持正则替换
asp.net 正则全文档,asp.net 正则全文档,asp.net 正则全文档,
正则表达式入门教程正则表达式入门教程正则表达式入门教程正则表达式入门教程
正则表达式在。net下的转义符意义 正则表达式是正则表达式引擎尝试匹配输入文本的一种模式。 模式由一个或多个字符文本、运算符或构造组成
regexdesigner.net是一个强力的可视化工具,可以帮助我们构建与测试.NET正则表达式,RegexDesigner.NET让我们将我们开发出的正则表达式集成到我们的应用程序,可以方便的生成C#或VB.NET代码并编译成程序集 ...
正则表达式 测试工具 单选模式、多行模式等
asp.net正则表达式
.NET正则表达式基础使用教程。该文件为Visual Studio 2013项目文件。里面有4个小项目,分别用于介绍正则表达式的字符组,量词,分组,断言。具体请参考我即将推出的博客教程。谢谢各位。
说明:.Net正则表达式测试工具,这下测试正则表达式方便多啦,不用麻烦得调试了
没分了,收2分,ASP.NET正则表达式。
regexdesigner.net是一个强力的可视化工具,可以帮助我们构建与测试.NET正则表达式,RegexDesigner.NET让我们将我们开发出的正则表达式集成到我们的应用程序,可以方便的生成C#或VB.NET代码并编译成程序集 ...