Tim*_*oss 4 regex square-bracket
我尝试在 C# 中使用正则表达式来匹配可以包含以下内容的软件版本号:
一些例子:
10.1.23.26812 83.33.7.5 10.1.23.26812[d] 83.33.7.5[q]
无效示例:
10.1.23.26812[ 83.33.7.5] 10.1.23.26812[d 83.33.7.5q
我已经尝试过以下方法:
string rex = @"[0-9][0-9][.][1-9]([0-9])?[.][1-9]([0-9])?[.][1-9]([0-9])?([0-9])?([0-9])?([0-9])?([[][a-zA-Z][]])?";
Run Code Online (Sandbox Code Playgroud)
(注意:如果我尝试不使用“@”并通过执行“\[”来转义方括号,则会收到错误消息“无法识别的转义序列”)
我可以达到版本号正确验证的程度,但它接受后面的任何内容(例如:“10.1.23.26812thisShouldBeWrong”被匹配为正确)。
所以我的问题是:有没有一种方法可以使用正则表达式来匹配/检查字符串中的方括号,或者我是否需要将其转换为不同的字符(例如:将 [a] 更改为 a并匹配 *s )?
发生这种情况是因为正则表达式匹配字符串的一部分,而您没有告诉它强制整个字符串匹配。另外,您可以大大简化正则表达式(例如,您不需要所有这些捕获组:
string rex = @"^[0-9]{2}\.[1-9][0-9]?\.[1-9][0-9]?\.[1-9][0-9]{0,4}(?:\[[a-zA-Z]\])?$";
Run Code Online (Sandbox Code Playgroud)
和是匹配字符串开头和结尾的^锚点。$
您提到的错误消息与以下事实有关:如果您不使用逐字字符串,则还需要转义反斜杠。因此,字面左括号可以在正则表达式中匹配为"[[]"or "\\["or @"\["。后一种形式是优选的。