【问题标题】:Weird Regex Match奇怪的正则表达式匹配
【发布时间】:2013-11-21 09:08:17
【问题描述】:

我有以下正则表达式:

Regex.IsMatch(someString, "[1-9][0-9]*\.[0-9]")

我希望 someString 只允许像 x.y 这样的表单,其中 x > 0 和 0 <= y <= 9。 但它不会像例外一样工作,一个例子:

someString = "1.02"
Regex.IsMatch(someString, "[1-9][0-9]*\.[0-9]")

等于true,但这不可能 我还尝试了另一个正则表达式:

Regex.IsMatch(someString, "[1-9][0-9]*\.[0-9]{1}")

但这并没有什么区别......还是我的模式中缺少什么?

【问题讨论】:

  • 0 >= y >= 9 不可能是正确的...因为 y 必须同时为负数且大于 9,这根本行不通。请再次描述您希望 y 成为哪些值。
  • 我注意到您的正则表达式字符串无效,因为 \. 将报告为“无法识别的转义序列”。您应该确保您提供的代码正在完成工作。 :)
  • @Igle:我认为您可能需要重新阅读它。我不确定你从哪里得到 x 必须是负数并且大于 9 并且 y 是一个数字(这基本上是这样说的)对我来说似乎很好。
  • 应该是0 <= y <= 9,我弄混了抱歉。
  • 0 >= y >= 9 只是一个没有 y 解的方程。作者刚刚在他的问题中将其更正为 0

标签: c# .net regex vb.net


【解决方案1】:

您需要在此处使用行首 ^ 和行尾 $ 锚点,否则您将获得部分匹配,如您的情况,更改为:

^[1-9][0-9]*\.[0-9]$

您的原始表达式匹配了1.02 的一部分,即1.0,虽然它是有效的并且单独使用时它实际上是有效的,但锚点会阻止表达式匹配部分字符串并强制整个表达式匹配。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-10-07
    • 2019-12-30
    • 1970-01-01
    • 1970-01-01
    • 2020-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多