c# - C# 中的意外 Regex.Match 结果

标签 c# regex

匹配 match = Regex.Match(returnValue, @regex, RegexOptions.IgnoreCase);

上述代码行中的变量包含以下值:

返回值:“标签”

@regex : "[A-Z][a-z][a-z]"

我假设正则表达式函数匹配应该失败,因为单词“标签”有 3 个小写字母,而不是正则表达式变量显示的 2 个。但是,对于上述代码,ma​​tch.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]);
}

我猜这需要更改吗?

最佳答案

试试这个:

@regex : "^[A-Z][a-z][a-z]$"

解释:

  • $ 匹配行尾,所以你的第三组会匹配小写的 g,但是后面还有额外的字符,导致 $ 不匹配。

  • ^ 匹配行首,防止匹配字符串中间,例如 guten TagaaaAaa

这应该只匹配 Tag,而不匹配 Tags。但它也会匹配 ZagAaa 等。pp. - 你真的想要那个吗?

第三次编辑: 你正在使用这一行:

Match match = Regex.Match(returnValue, @regex, RegexOptions.IgnoreCase);

为什么在进行区分大小写的匹配时忽略大小写?

供您编辑: 这取决于 - 当您的用户想要在字符串中找到它时,没关系。如果你想知道给定的字符串是否作为一个整体匹配,你需要在前面加上“^”并在末尾附加“$”。

关于c# - C# 中的意外 Regex.Match 结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25304288/

相关文章:

JavaScript 正则表达式 : find GUID in an URL and replace it

java - 正则表达式获取空格或 ""之间的所有内容

c# - 在 C# 中动态组合类

c# - 字符串格式化和打印

javascript - javascript 中的正则表达式无法按预期工作

javascript - 标签之间的正则表达式匹配文本

java - 以特殊方式拆分字符串

c# - 如何将数据行流式传输到sql server?

C#、Dapper、SQL Server 和连接池

c# - 将 Gridview 绑定(bind)到 Treeview 节点单击