【问题标题】:VB6 and C# regexesVB6 和 C# 正则表达式
【发布时间】:2012-10-10 13:47:18
【问题描述】:

我需要将一个 VB6(我不熟悉)项目转换为 C# 4.0 项目。该项目包含一些用于字符串验证的正则表达式。

我需要知道正则表达式在这两种情况下的行为是否相同,所以如果我只是将正则表达式字符串从 VB6 项目复制到 C# 项目,它们的工作方式是否相同?

我对正则表达式有基本的了解,我几乎可以阅读一个正则表达式的功能,但对于口味等,目前这有点超出我的想象。

例如,这两行是否等价?

VB6:

isStringValid = (str Like "*[!0-9A-Z]*")

C#:

isStringValid = Regex.IsMatch(str, "*[!0-9A-Z]*");

谢谢!

【问题讨论】:

  • 这完全取决于正则表达式。如果它很简单,它应该可以很好地复制,如果它很复杂,它可能不会。
  • 它们很有可能会起作用,但存在许多细微的差异,因此您应该发布一些示例。如果您需要批量转换它们,请考虑投资RegexBuddy
  • 好吧,这更像是一个普遍的问题:正则表达式的工作方式是否相同?如果它取决于正则表达式,那么答案将是:否 :) 但我会发布一个促使我提出这个问题的正则表达式。
  • 我认为正则表达式字符串应该可以正常工作。 VB 和 C# 都是 .NET 语言并使用相同的正则表达式“风味”
  • @toadzky:VB6 是 VB 采用 .NET 框架和 Visual Basic .NET 之前的版本。 VB6 和 VB.NET 之间的差异如此之大,应该将它们视为不同的语言,而不是同一语言的版本。

标签: regex c#-4.0 vb6 vb6-migration


【解决方案1】:

旧的 VB Like 操作符,尽管看起来,并不是一个正则表达式接口。它更像是一个全局模式匹配器。见http://msdn.microsoft.com/en-us/library/swf8kaxw.aspx

在你的例子中:

Like "*[!0-9A-Z]*"

匹配以任意字符(零个或多个)开头和结尾的字符串,然后不匹配中间某处的字母数字字符。正则表达式是:

/.*[^0-9A-Z].*/

编辑回答您的问题:不,两者不能互换使用。但是,将Like 的操作数转换为适当的正则表达式相当容易:

Like       RegEx
========== ==========
?          .
*          .*
#          \d
[abc0-9]   [abc0-9]
[!abc0-9]  [^abc0-9]

对此有一些注意事项,但这应该可以帮助您入门并涵盖大多数情况。

【讨论】:

  • 谢谢,这正是我想要了解的内容。
【解决方案2】:

总之,是的。

这些都是一样的。一些快速的谷歌搜索应该可以为您提供更复杂问题的答案。

http://social.msdn.microsoft.com/Forums/en-US/csharpgeneral/thread/bce145b8-95d4-4be4-8b07-e8adee7286f1/

http://www.regular-expressions.info/dotnet.html

【讨论】:

  • VB6 Like 运算符不使用正则表达式。
猜你喜欢
  • 1970-01-01
  • 2011-01-21
  • 2019-09-18
  • 2011-12-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多