2

所以这里有很多关于正则表达式的问题和答案。缺点是绝大多数答案只是则表达式......

我也用谷歌搜索过——发现了数百个网站。试图通过所有事情来快速理解和实施答案并不容易。它们要么使用不同的语言——这可能不应该有任何区别,尽管你在 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-rrenFalse由于-连字符应该返回

da rren应该返回True

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

我真的很感激有人指出我哪里出错了,并解释了一些关于正则表达式的构成。

一旦我对它们有了更多了解,我就需要能够有不同的表达方式来允许其他字符,例如!@" ' . 等等。所以请不要只粘贴表达式来解决上面的简单示例。

4

3 回答 3

6

第一个模式是正确使用的模式。如果字符串中只有一个字符匹配,则第二种模式将返回 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
于 2012-12-11T21:00:18.130 回答
3

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

Regex.IsMatch("subject", "regex") 

检查正则表达式是否匹配主题字符串。

Regex.Replace("subject", "regex", "replacement") 

执行搜索和替换。

Regex.Split("subject", "regex") 

如上所述,将主题字符串拆分为字符串数组。所有这些方法都接受一个可选的附加类型参数RegexOptions,比如构造函数。

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

于 2012-12-11T20:53:17.893 回答
2

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

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

[^A-Za-z0-9 ]

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

Dim r As New Regex("[^A-Za-z0-9 ]")
Dim supported = Not r.IsMatch(fontName)
于 2012-12-11T21:05:26.447 回答