65.9K
CodeProject 正在变化。 阅读更多。
Home

理解 .NET 中的正则表达式

starIconemptyStarIconemptyStarIconemptyStarIconemptyStarIcon

1.00/5 (7投票s)

2002 年 11 月 5 日

1分钟阅读

viewsIcon

76348

我创建了一个正则表达式评估器。它证明非常有帮助。请随意使用,如果您需要源代码,请给我发电子邮件。

评估器可以在这里找到:RegexEvaluate.aspx

评估器本身就是一个学习过程,但非常值得。您需要对 SDK 中的 .NET 正则表达式语法进行一些研究。我需要评估器来帮助创建 SQL 和 HTML 的解析表达式。如果没有这个工具进行测试,生成正确的表达式几乎是不可能的。我不知道有多少人深入使用正则表达式,但它们在各种情况下都非常有用。

注意使用分组语法,例如 (?....)。 影响很大。

以下是我用来解析 HTML 的直接代码。我是 JScript.NET 的爱好者,所以请您多多包涵。我希望我知道一种内置的 .NET 方法来做到这一点,但它还没有向我展示。

	class RegularExpressions {

		static function TagOpen(tagname:String) :String
			{ return '<\\s*(?<tagname>'+tagname+')\\s*(?(?:\\s*\\b\\w+\\b\\s*(?:=\\s*(?:"[^"]*"|\'[^\']*\'|[^"\'<> ]+)\\s*)?)*)/?\\s*>' }
		static function TagClose(tagname:String) :String
			{ return '<\\s*/\\s*(?<tagname>'+tagname+')\\s*>' }
		static function NameValue(name:String) :String
			{ return '(?<name>'+name+')(\\s*=\\s*("(?<value>[^"]*)"|\'(?<value>[^\']*)\'|(?<value>[^"\'<> ]+)))?' }
		static function MLtags(tagname:String) :Regex
			{ return new Regex( TagOpen(tagname)+"|"+TagClose(tagname), RegexOptions.IgnoreCase ) }
		static function MLopentags(tagname:String) :Regex
			{ return new Regex( TagOpen(tagname) ) }
		static function NVpair(name:String) :Regex
			{ return new Regex( NameValue(name), RegexOptions.IgnoreCase )  }
		static const HTMLtags:Regex = MLtags('\\w+')
		static const IMGtags:Regex = MLopentags('IMG')
		static const NameValuePairs:Regex = NVpair('\\w+')
		static const Email:Regex = new Regex( '(?:\w+[.]?)+@\w+(?:[.]\w+)+', RegexOptions.IgnoreCase)

	}
很抱歉将这一个留作谜题,但如果您需要,应该能够弄清楚。

我创建的 SQL 表达式和方法要复杂得多,现在我很难向自己解释。但我很乐意让别人骂我是个白痴,因为我做了这些,并向我展示更好的方法。HTML 解析是必要的,将 html 拆分为控件,以便用其程序化对应项替换某些控件(例如 <img> 标签)。创建 SQL 表达式是为了帮助消除 SQL 语句中的细微差别,例如大小写和空格。并准确地分解表达式,以帮助缓存数据/确定缓存数据。

希望这有帮助...
--Oren

© . All rights reserved.