3

所以,VB6/VB.NET 有一个Like关键字,有点像正则表达式。

我知道这是在做什么,但我不是正则表达式的专家,希望有人能提供帮助(我想使用正则表达式而不是字符串特定的东西,如 IndexOf/get the last char):

VB代码:

If (someDataStr Like "[*]??????????????8") Then
 ...
end if

所以我专注于这个:

"[*]??????????????8"

就正则表达式而言,这将是什么?

4

2 回答 2

9

根据 Damien_The_Unbeliever 的链接,我假设您的模式匹配一​​个 literal *、14 个任意字符,然后是一个 literal 8

那么这将是你的正则表达式:

@"^\*.{14}8$"

请注意,.通常不会匹配换行符。如果需要,请设置该SingleLline选项。

Match match = Regex.Match(input, @"^\*.{14}8$", RegexOptions.Singleline)

if (match.Success)
{
    // string has valid format
}
于 2012-10-30T15:24:35.697 回答
0

基于 Martin Büttner 的回答,这就是我将 VBLike运算符转换为 C# 的方法Regex。由于LikeVisual Studio 2013 中的运算符支持一些额外的正则表达式等功能,因此需要做一些额外的工作来转换模式。

// escape RegEx special characters
var pattern = Regex.Escape(likePattern);
// convert negative character lists into RegEx negative character classes
pattern = Regex.Replace(pattern, @"\\\[!(?<c>[^\]]*)\\\]", @"[^${c}]", RegexOptions.Compiled | RegexOptions.Singleline | RegexOptions.ExplicitCapture);
// convert positive character lists into RegEx positive character classes
pattern = Regex.Replace(pattern, @"\\\[(?<c>[^\]]*)\\\]", @"[${c}]", RegexOptions.Compiled | RegexOptions.Singleline | RegexOptions.ExplicitCapture);
// convert asterisks into RegEx pattern for zero or more characters
pattern = Regex.Replace(pattern, @"(?<!\[[^\]]*)\\*(?![^\]*\])", @".*", RegexOptions.Compiled | RegexOptions.Singleline | RegexOptions.ExplicitCapture);
// convert question marks into RegEx pattern for any single character
pattern = Regex.Replace(pattern, @"(?<!\[[^\]]*)\\?(?![^\]*\])", @".", RegexOptions.Compiled | RegexOptions.Singleline | RegexOptions.ExplicitCapture);
// convert hash/number sign into RegEx pattern for any single digit (0 - 9)
pattern = Regex.Replace(pattern, @"(?<!\[[^\]]*)#(?![^\]*\])", @"[0-9]", RegexOptions.Compiled | RegexOptions.Singleline | RegexOptions.ExplicitCapture);
// make pattern match whole string with RegEx start and end of string anchors
pattern = @"^" + pattern + @"$";

// perform "like" comparison
return Regex.IsMatch(input, pattern, RegexOptions.IgnoreCase | RegexOptions.Singleline);

警告:此代码未经测试!

于 2016-04-21T19:09:57.907 回答