我正在尝试使用正则表达式来验证用户对我正在处理的项目的输入。我目前使用的模式是
^[1-9][0-3]?|[Q|q]$ //Range of 1-13 or Q|q (Can't include 0)
根据 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]$");
}
^[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])$
查看正则表达式演示
详
^
- 字符串的开头(?:[1-9]|1[0-3]|[Qq])
- 一个分组构造(非捕获组((使^
和$
定位点应用于组中的所有备选方案(匹配:[1-9]
- 从1
到9
的数字|
- 或1[0-3]
-1
,然后是0
到3
的数字|
- 或[Qq]
-q
或Q
$
- 字符串的结尾。
您可以使用以下内容:
^(1[0-3]|[1-9]|Q|q)$
或:
^(1[0-3]|[1-9Qq])$
请参阅示例:https://regex101.com/r/y6htBi/1