2012-10-30 35 views
3

因此,VB6/VB.NET有一个Like关键字,它就像一个正则表达式。从VB到C#的正则表达式(LIKE到正则表达式)

我知道这是什么做的,但我不是在正则表达式的专家,希望有人能好心帮(我想用正则表达式,而不是字符串具体的东西喜欢的IndexOf /获取最后一个字符):

VB代码:

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

所以我专注于这一点:

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

什么这会是一个正则表达式前的条款压力?

+0

那么,如果你知道这是做什么,那么你为什么不告诉我们? :) –

+1

因此,它匹配一个文字'*',任意14个任意字符和一个文字'8'?这是我从[这里]得到的(http://msdn.microsoft.com/en-us/library/swf8kaxw.aspx) –

回答

9

基于Damien_The_Unbeliever的链接,我认为你的模式匹配的文字*,14任意字符,然后文字8

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

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

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

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

if (match.Success) 
{ 
    // string has valid format 
} 
+0

谢谢。答案接受。这似乎是伎俩!现在如果让我们说我们不关心字符长度,但想看看字符串是否以“8”结尾,但使用正则表达式? –

+1

如果它仍然必须以'*'开头,请使用'^ \ *。* 8 $'。如果您只想检查字符串是否以'8'结尾,请使用'8 $'。与LIKE相反,正则表达式不必匹配完整的字符串。我们分别通过使用string-start和-end锚点'^'和'$'明确地添加了该要求。 –

0

大厦马丁布特内尔的答案,这是我做的VB Like运营商转换成C#Regex。由于Visual Studio 2013中的Like运算符支持一些额外的正则表达式功能,因此转换该模式需要额外的工作。

// 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); 

警告:此代码尚未经过测试!