我正在尝试使用正则表达式来验证我正在处理的项目的用户输入.我目前使用的模式是
^[1-9][0-3]?|[Q|q]$ //Range of 1-13 or Q|q (Can't include 0)
Run Code Online (Sandbox Code Playgroud)
根据Regex101.com,它显示用户输入(例如15)不匹配,但是当我运行项目时,它就像是匹配一样.如何限制此正则表达式仅接受1-13中的数字范围和字符Q或q?对于上下文中我的while循环错误,这里也是代码.
while (!match.Success)
{
// Ommited Console.WriteLines to for clarity.
FancyArtBottom();
Console.SetCursorPosition(47, 19);
userSelection = Console.ReadLine();
match = Regex.Match(userSelection, @"^[1-9][0-3]?|[Q|q]$");
}
Run Code Online (Sandbox Code Playgroud)
该^[1-9][0-3]?|[Q|q]$模式中数字从匹配1到9随后与来自一个可选的数字 0到3在所述串(同的开始^[1-9][0-3]?部分),或(|)一个Q,|或q在字符串的末尾(带[Q|q]$部).所以,|"分裂"模式并且它比你期望的更匹配.
此外,[1-9][0-3]?刚刚匹配比数字更来自0于13如你所见.
此外,|字符类的内部与文字|字符匹配,它失去了交替运算符的特殊含义.
你可以用
^(?:[1-9]|1[0-3]|[Qq])$
Run Code Online (Sandbox Code Playgroud)
请参阅正则表达式演示
细节
^ - 字符串的开头(?:[1-9]|1[0-3]|[Qq])- 分组构造(非捕获组)(制作^和$锚点适用于组中的所有备选方案)匹配:
[1-9]-从数字1到9| - 要么1[0-3] - 1然后从数字0到3| - 要么[Qq] - q或Q$ - 字符串结尾.