如何在vb.net中进行正则表达式

时间:2012-12-11 20:50:11

标签: asp.net regex vb.net

因此,围绕正则表达式的主题有很多问题和答案。缺点是绝大多数答案只是 正则表达式......

我也用Google搜索 - 并找到了数百个网站。试图通过一切来快速理解和实现答案并不容易。它们要么使用不同的语言 - 这可能不会有任何区别,尽管你在C#中以不同的方式逃避VB,这会导致混淆转义字符与正则表达式转换的对比。

我正在努力的部分是理解它们,所以我可以实现一些显而易见的简单表达。

我的情景:

我必须检查给定字符串中的每个字符,如果正则表达式不允许任何字符,那么它应该返回false。

示例:

我尝试过以下表达式(在这里复制/粘贴各种答案......)

Dim r As New Regex("^[a-zA-Z0-9 ]*$")

也尝试了

Dim r As New Regex("[a-zA-Z0-9\s]")

也尝试了

Dim r as New Regex("^[A-Za-z0-9 ]*")

我一直在实施这个:

Dim r As New Regex(_fontJIAdieuxRegEx) '' where _fontJIAdieuxRegEx is one of the above regex strings.
Dim supported = r.IsMatch(fontName)

我一直在尝试验证以下内容:

darren应该返回True

由于da-rren连字符

False应返回-

da rren应该返回True

现在,简单地说,这些表达式中的任何一个都将为所有字符串返回True或为所有字符串返回False;所以我显然做错了什么。

我真正欣赏的是有人指出我出错的地方,并解释一下正则表达式的构成。

一旦我理解了它们,我需要能够使用不同的表达式来允许其他字符,例如! @“'等等。所以请不要只是粘贴表达式来解决上面的简单例子。

3 个答案:

答案 0 :(得分:5)

第一种模式是正确使用的模式。如果字符串中只有一个字符匹配,则第二个模式将返回true。如果字符串开头的零个或多个字符匹配,则第三个模式将返回true,它总是匹配。

我不知道你做了什么让它不起作用,但是使用它就像这样有效:

Dim _fontJIAdieuxRegEx As String = "^[a-zA-Z0-9 ]*$"

Dim r As New Regex(_fontJIAdieuxRegEx)

Console.WriteLine(r.IsMatch("darren"))
Console.WriteLine(r.IsMatch("da-rren"))
Console.WriteLine(r.IsMatch("da rren"))

输出:

True
False
True

答案 1 :(得分:3)

正则表达式类位于命名空间System.Text.RegularExpressions中。要使它们可用,请在源代码的开头放置Imports System.Text.RegularExpressions。

Regex.IsMatch(“subject”,“regex”) 检查正则表达式是否与主题字符串匹配。

Regex.Replace(“subject”,“regex”,“replacement”) 执行搜索和替换。

Regex.Split(“主题”,“正则表达式”) 将主题字符串拆分为如上所述的字符串数组。所有这些方法都接受RegexOptions类型的可选附加参数,如构造函数。

来源/更多信息:http://www.regular-expressions.info/dotnet.html

答案 2 :(得分:2)

您的第二个表达式与任何内容匹配。字符类末尾的*字符告诉正则表达式引擎匹配该字符类或更多次。由于表达式中没有其他条件,因此任何字符串都是有效的。第三个表达式匹配至少有一个有效字符的任何内容。

第一个表达式应该有效,但如果你不需要它们,我不是开始和结束锚点(^$)的粉丝。我在这里要做的是反转表达式...寻找无效的字符。表达式如下所示:

  

[^ A-Za-z0-9]

在这种情况下,用作字符类一部分的^字符意味着否定类:这将匹配任何的字符那个类,因为我们没有任何锚点,如果这样的字符出现在字符串中的任何地方,它将匹配。当然,现在我还必须在VB.Net代码中反转结果:

Dim r As New Regex("[^A-Za-z0-9 ]")
Dim supported = Not r.IsMatch(fontName)