Match match = Regex.Match(returnValue, @regex, RegexOptions.IgnoreCase);
上面一行代码中的变量包含以下值:
returnValue : "Tags"
@regex : "[A-Z][a-z][a-z]"
我假设正则表达式函数匹配应该失败,因为单词“Tags”有3个小写字母而不是2正如regex变量所示。但是,对于上面的代码, match.Success总是返回true 。
这让我很困惑,任何解释都会受到赞赏。谢谢!
更新:
以下是我需要的更详细的解释。我正在尝试创建类似正则表达式生成器的东西。
用户输入A
表示较高,a
表示较低,d
表示数字。现在,如果用户传递了Tags
之类的单词,我会检查传递的字符串,看它是否适合用户指定的规则。
这是我目前的逻辑:
if (patternChars[strIndex] == 'A')
{
regexBuilder.Append("[A-Z]");
} else if (patternChars[strIndex] == 'a')
{
regexBuilder.Append("[a-z]");
} else if (patternChars[strIndex] == 'd')
{
regexBuilder.Append("\\d");
} else {
regexBuilder.Append(patternChars[strIndex]);
}
我猜这需要改变吗?
答案 0 :(得分:3)
试试这个:
@regex : "^[A-Z][a-z][a-z]$"
说明:
$
与行结尾匹配,因此您的第三个组将匹配小写g
,但是还有其他字符,导致$
无法匹配。
^
与第一行匹配,阻止字符串中间的匹配,例如,guten Tag
或aaaAaa
这应该仅匹配Tag
,而不是Tags
。但它也会与Zag
,Aaa
等匹配。 - 你真的想要吗?
第三次编辑: 你正在使用这一行:
Match match = Regex.Match(returnValue, @regex, RegexOptions.IgnoreCase);
为什么在进行区分大小写的匹配时忽略这种情况?
进行编辑: 这取决于 - 当您的用户想要在字符串中找到它时,它是可以的。如果你想知道一个给定的字符串是否匹配,你需要预先添加" ^"并附加" $"最后。
答案 1 :(得分:2)
答案 2 :(得分:1)
Match(String,String,RegexOptions)方法返回与输入字符串中的正则表达式模式匹配的第一个子字符串;
regexBuilder.Append("^");
if (patternChars[strIndex] == 'A')
{
regexBuilder.Append("[A-Z]");
} else if (patternChars[strIndex] == 'a')
{
regexBuilder.Append("[a-z]");
} else if (patternChars[strIndex] == 'd')
{
regexBuilder.Append("\\d");
} else {
regexBuilder.Append(patternChars[strIndex]);
}
regexBuilder.Append("$");