OrE*_*lse 2 regex vb.net validation
我试图通过RegEx验证如下...
If Regex.IsMatch(Output, "\b" & "Serial)" & "\b") Then
'do something
end if
Run Code Online (Sandbox Code Playgroud)
但是我得到了这个Argument异常
parsing "\bSerial)\b" - Too many )'s.
Run Code Online (Sandbox Code Playgroud)
我确实理解错误,但我应该如何修改RegEx表达式?
UPDATE."Serial"一词是动态生成的.这意味着至少对我来说,我也可以为另一个角色获得另一个例外.
假设是VB.Net,你需要逃避):
If Regex.IsMatch(Output, "\b" & "Serial\)" & "\b") Then
'do something
End If
Run Code Online (Sandbox Code Playgroud)
在.Net正则表达式中,括号是分组字符.
如果,如你所说,动态生成"Serial"这个词,你必须在将它传递给RE引擎之前将其转义:
If Regex.IsMatch(Output, "\b" & Regex.Escape("Serial)") & "\b") Then
'do something
End If
Run Code Online (Sandbox Code Playgroud)
正如另一个回答者发布的那样,这将不匹配"Serial) xyz"(例如),因为空间\b之间没有)(\b只存在于 字符和两者之间\w以及空间).\W)\W
你可能不得不求助于一个丑陋的黑客:
If Regex.IsMatch(Output, "\s" & Regex.Escape("Serial)") & "\s") _
Or Regex.IsMatch(Output, "\s" & Regex.Escape("Serial)") & "$") _
Or Regex.IsMatch(Output, "^" & Regex.Escape("Serial)") & "\s") _
Or Regex.IsMatch(Output, "^" & Regex.Escape("Serial)") & "$") _
Then
'do something
End If
Run Code Online (Sandbox Code Playgroud)
我想也许你可以匹配一个由(^或$)组成的字符类\s:
If Regex.IsMatch(Output, "[\s^]" & Regex.Escape("Serial)") & "[\s$]") Then
'do something
End If
Run Code Online (Sandbox Code Playgroud)
但这似乎不适用于此处的正则表达式测试程序,因此您可能需要使用丑陋的黑客版本,或者您可以将它们组合成单个正则表达式,如:
var input = "Serial)"
var escaped = Regex.Escape (input)
var regex = "\s" & escaped & "\s|^" & escaped & "$|\s" & escaped & "$|^" & escaped & "\s"
If Regex.IsMatch(Output, regex) Then
'do something
End If
Run Code Online (Sandbox Code Playgroud)