【问题标题】:Regex.IsMatch returning true when it should notRegex.IsMatch 在不应该返回 true 时
【发布时间】:2014-04-22 02:34:00
【问题描述】:

正则表达式模式

patternMatch = "^(?i)/(A|B)?(?:/index.html|/|)"

输入字符串 -

inputString = "/_Test/C.asmx"

(Regex.IsMatch(inputString, patternMatch, RegexOptions.IgnoreCase)) 返回真,什么时候应该返回假。

现在,我知道双 '?'不需要在正则表达式模式中。但是,我只是想找出模式匹配失败的原因。

http://www.regexr.com/ 告诉我它应该返回 false。

【问题讨论】:

  • 它匹配是因为 or:|.. 也.. Regexr 匹配它。它匹配第一个正斜杠。
  • 是的,正则表达式不匹配。它不应该。但是,在 .net Regex.IsMatch 中返回 true。
  • 怎么来的或者:|是否干扰了模式匹配?

标签: c# regex


【解决方案1】:

您可能指的是这个正则表达式:

patternMatch = @"^(?i)/(A|B)?(?:/index\.html|/|)$"

@ 是原始的正则表达式字符串。

\. 是转义点,以便匹配文字点(而不是任何字符)。

$ 是匹配字符串的结尾,并确保正则表达式尝试匹配整个字符串。

【讨论】:

  • 谢谢杰瑞。抱歉,我的问题不够清楚 - 我主要担心的是,在 .NET 中,这个正则表达式通过了,而在 regexr.com 中,我认为 .NET 正则表达式测试器没有通过?有没有办法在进行比较之前使这些正则表达式条目与 .NET 兼容(正则表达式条目是在系统中手动输入的,因此存在错误范围)。
  • @NomadTraveler 好的,我会尽力解决您的问题,但我不确定我是否理解您在寻找什么。 regexr 是基于 JavaScript 的正则表达式测试器,而不是 .NET。我所知道的最好的 .NET 正则表达式测试器是 regexhero.net。然后,regexr is telling you your regex returns true。只要输入的任何部分突出显示,就存在匹配。 regex101 可能更清楚,它不是基于 .NET 的正则表达式测试器,但支持比正则表达式更多的 .NET 功能。
  • 你想让正则表达式 .NET 兼容是什么意思?这听起来像是一项艰巨的工作,只有输入这些正则表达式的人才能知道他们输入的正则表达式是否与 .NET 兼容。你到底在找什么?喜欢将任何不兼容的正则表达式转换为 .NET 兼容的正则表达式?
  • 我认为整个输入字符串要突出显示,如果它与 Regexr 匹配? Regex101 不过看起来不错。是的,这个想法是在测试它是否与输入字符串匹配之前使正则表达式 .NET 兼容。例如,如果我从您的正则表达式中删除 $,则正则表达式与输入字符串 /_Test/C.asmx? 匹配
  • @NomadTraveler 好吧,我不确定您在寻找哪种解决方案。正如我所说,如果用户对该主题有所了解,那将是最好的。 regexhero.net 专门用于 .NET。不幸的是,全部功能(复制/粘贴、链接)不是免费的,但您仍然可以免费测试。它会告诉您匹配的数量,例如在这个picture 中。我认为您的原始问题已被“回答”,因为您的正则表达式应该返回 true 并且 regexr 同意这一点。你只是误解了它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多