我一直在测试这种模式:
Dim argumentsPattern As String = "/(?<var>.+):(?<val>.+)"
字符串看起来很好用:
/import-machinelist:Computers.txt
但是当字符串包含文件路径时,第二个冒号会破坏模式。
/import-machinelist:C:\Users\Administrator\Desktop\WinZooka\WinZooka\bin\Debug\computers.txt
如何修复模式以忽略第二个冒号?
这是我正在使用的vb.net代码。
Dim commandLineArgs() As String = Environment.GetCommandLineArgs()
Dim argumentsPattern As String = "/(?<var>.+):(?<val>.+)"
Dim localRegex = New Regex(argumentsPattern, RegexOptions.IgnoreCase)
For Each arg As String In commandLineArgs
If arg = "/?" Then
MsgBox("Command line variables:" & Chr(13) & Chr(10) & _
"/username:JohnDoe" & Chr(13) & Chr(10) & _
"/password:Password1" & Chr(13) & Chr(10) & _
"/domain:lab.com" & Chr(13) & Chr(10) & _
"/import-machinelist:Computers.txt" & Chr(13) & Chr(10))
Else
Dim localMatch As Match = localRegex.Match(arg)
If localMatch.Success Then
Select Case localMatch.Groups("var").ToString
Case "username"
txtUser.Text = localMatch.Groups("val").ToString
Case "password"
txtPass.Text = localMatch.Groups("val").ToString
Case "domain"
txtDomain.Text = localMatch.Groups("val").ToString
Case "import-machinelist"
importMachineList(localMatch.Groups("val").ToString)
End Select
End If
End If
Next
任何帮助都将不胜感激。
答案 0 :(得分:0)
如果\
后面没有{ - 1>},则可以使用与冒号匹配的负向lookbehind:
\/(?<var>.+):(?!\\)(?<val>.+)
不确定它是否涵盖了您的所有情况。
答案 1 :(得分:0)
尝试将分隔符更改为分号(;
),然后您可以使用正则表达式或拆分参数,如下所示:
带分号的正则表达式:
Dim argumentsPattern As String = "/(?<var>.+);(?<val>.+)"
以分号分隔参数字符串:
Dim argSplit As String() = arg.Split(';')
Select Case argSplit(0)
Case "username"
txtUser.Text = localMatch.Groups("val").ToString
Case "password"
txtPass.Text = localMatch.Groups("val").ToString
Case "domain"
txtDomain.Text = localMatch.Groups("val").ToString
Case "import-machinelist"
importMachineList(localMatch.Groups("val").ToString)
End Select
答案 2 :(得分:0)
您可以通过添加?
:
Dim argumentsPattern As String = "/(?<var>.+?):(?<val>.+)"
这意味着它只捕获到第一个冒号之前。