我正在尝试使用正则表达式来验证用户对我正在从事的项目的输入。我当前使用的模式是
^[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]$");
}
答案 0 :(得分:5)
^[1-9][0-3]?|[Q|q]$
模式在字符串的开头匹配从1
到9
的数字,然后是从0
到3
的可选数字(以^[1-9][0-3]?
部分),或(|
)在字符串的末尾带有Q
部分的|
,q
或[Q|q]$
。因此,|
“分割”了模式,并且匹配程度超出了您的预期。
此外,如您所见,[1-9][0-3]?
仅比0
到13
的数字匹配。
此外,字符类中的|
与文字|
字符匹配,它失去了alternation operator的特殊含义。
您可以使用
^(?:[1-9]|1[0-3]|[Qq])$
请参见regex demo
详细信息
^
-字符串的开头(?:[1-9]|1[0-3]|[Qq])
-分组构造(a non-capturing group)(使^
和$
锚适用于组中的所有替代项)匹配:
[1-9]
-从1
到9
的数字|
-或1[0-3]
-1
,然后是从0
到3
的数字|
-或[Qq]
-q
或Q
$
-字符串的结尾。答案 1 :(得分:1)