C# 用于数字范围的正则表达式和用于验证的一个字符
我正在尝试使用正则表达式验证用户对我正在处理的项目的输入。我目前使用的模式是C# 用于数字范围的正则表达式和用于验证的一个字符,c#,regex,validation,filter,C#,Regex,Validation,Filter,我正在尝试使用正则表达式验证用户对我正在处理的项目的输入。我目前使用的模式是 ^[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)
^[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>$
part)。因此,|
“分割”模式,它比您预期的匹配更多
而且,正如您所看到的,只需匹配从0
到13
的多个数字即可
此外,字符类中的
与文本
字符匹配,它失去了字符的特殊含义
你可以用
^(?:[1-9]|1[0-3]|[Qq])$
见
详细信息
^
-字符串的开头
(?:[1-9]| 1[0-3]|[Qq])
-分组结构(a)(使^
和$
锚适用于组中的所有备选方案)匹配:
[1-9]
-从1
到9
|
-或
1[0-3]
-1
然后是从0
到3
|
-或
[Qq]
-q
或q
$
-字符串结束
该^[1-9][0-3]?|[Q|Q]$
模式匹配1
到9
之间的一个数字,然后在字符串的开头(带有^[1-9][0-3]?
部分)或(
)一个Q
,或字符串的末尾(带有)[Q | Q]$
part)。因此,
将模式“拆分”后,它会比您预期的匹配更多
而且,正如您所看到的,只需匹配从0
到13
的多个数字即可
此外,字符类中的
与文本
字符匹配,它失去了字符的特殊含义
你可以用
^(?:[1-9]|1[0-3]|[Qq])$
见
详细信息
^
-字符串的开头
(?:[1-9]| 1[0-3]|[Qq])
-分组结构(a)(使^
和$
锚适用于组中的所有备选方案)匹配:
[1-9]
-从1
到9
|
-或
1[0-3]
-1
然后是从0
到3
|
-或
[Qq]
-q
或q
$
-字符串结束
您可以使用以下内容:
^(1[0-3]|[1-9]|Q|q)$
或:
参见示例:您可以使用以下内容:
^(1[0-3]|[1-9]|Q|q)$
或:
参见示例:使用^(?[1-9]| 1[0-3]|[Qq])$
@WiktorStribiżew:在正则表达式中到底做了什么?似乎找不到它的作用。我以前见过一些人使用它。这是一个非捕获组。请参见,然后使用^(?[1-9]| 1[0-3]|[Qq])$
@WiktorStribiżew:在regex中到底做什么?似乎找不到它做什么。我以前见过一些人使用它。这是一个非捕获组。请看,这是一个。你犯了与OP相同的错误。这将与post做相同的事情。不,请看演示,15不匹配。删除了否决票,你原来没有该组设置到位。现在这将起作用。你正在犯与OP相同的错误。这将与帖子做相同的事情。不,请参阅演示,15不匹配。删除下一票,你最初没有设置分组。现在这将起作用。