【问题标题】:iOS regex pattern not working to match numbersiOS 正则表达式模式无法匹配数字
【发布时间】:2013-06-12 19:42:20
【问题描述】:

我想匹配表单的字符串:

123
.123
1.123

我正在为我的正则表达式使用以下字符串

@"^\\d*(?:\\.\\d+)?$"

但是,它也匹配以下形式的字符串

1.2.3
1..2..3
123...

我的正则表达式有什么问题?我使用了^ 和$,因为我不希望字符串包含除了提到的数字形式之外的任何内容。

编辑:

我记录了78..7之类的字符串中匹配的内容,发现匹配位置为0,长度为0,结果为“”匹配。有任何想法吗?如果长度为 0,范围位置不应该是 NSNotFound 吗?我想正则表达式很好,我可以检查 !length 但这似乎是不必要的工作。

【问题讨论】:

  • 查看我的更新答案。

标签: ios regex numbers


【解决方案1】:

试试这个正则表达式:

^(?<!\.)\d*(\.\d+)?$

我添加了一个否定的后视断言,这意味着在该数字之前不允许有任何点。这应该可以解决您的问题。

【讨论】:

  • 我也想匹配 .123 形式的字符串。我正在使用regexpal.com 检查我的正则表达式,我的模式应该可以正常工作。我不确定为什么它在 xcode 中不起作用。
  • 好的,我错过了那部分,但是可以检查一下,我也会添加更新
  • 我也用 + 试过了,它仍然匹配 1...23、1.2.3 和 123 等模式。
  • 没用。这与我原来的表达方式有什么不同,因为我是用行的开头和结尾来限制事物的?
  • 通常我会同意你的观点,但有些实现会忽略该规则。或者更好地用另一种方式解释它。目前我不知道如何解决它。如果我有想法,我会进行更新。
【解决方案2】:

说明

此正则表达式将找到带或不带小数点的有效正实数。比如123、.123、1.123。该表达式可以应用于一个字符串,其中测试的每个值都在它自己的行上,或者在文本块的中间查找数字。它还允许在数字后面直接使用句点和逗号等标点符号,但不会捕获它们。

(?&lt;=^|\s)\d*\.?\d+(?=[,.;]?(?:\s|$))

给定输入字符串:

1.2.3
1..2..3
128...
1234
.123
1.123
1...23
1.2.3
123...
I like kittens 345.23, and version 2.3.4 dogs

匹配项是:

1234
.123
1.123
345.23

【讨论】:

  • 随机问题,你是如何生成那个漂亮的图表的?
  • 嗨,马特,我正在使用 debuggex.com。尽管它不支持lookbehinds 或原子组,但它对于理解表达式流仍然很方便。还有 regexper.com。他们也做得很好,但在你输入的时候不是实时的。
【解决方案3】:

这对你有用吗?

@"^\\d*\\.?\\d+$"

这里没有转义的反斜杠:

^\d*\.?\d+$

【讨论】:

    【解决方案4】:

    我最好的猜测是 rekire 关于$ 符号不起作用是正确的。如果是这种情况,那么正则表达式确实匹配字符串开头的空子字符串,这就解释了为什么它说它在位置 0 找到长度为 0 的匹配,而不是 NSNotFound。

    【讨论】:

      【解决方案5】:

      这是匹配你的字符串的正则表达式:

      [0-9]*(.){0,1}[0-9]+
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-08-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多