所以,VB6/VB.NET 有一个Like
关键字,有点像正则表达式。
我知道这是在做什么,但我不是正则表达式的专家,希望有人能提供帮助(我想使用正则表达式而不是字符串特定的东西,如 IndexOf/get the last char):
VB代码:
If (someDataStr Like "[*]??????????????8") Then
...
end if
所以我专注于这个:
"[*]??????????????8"
就正则表达式而言,这将是什么?
根据 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
}
基于 Martin Büttner 的回答,这就是我将 VBLike
运算符转换为 C# 的方法Regex
。由于Like
Visual 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);
警告:此代码未经测试!