【问题标题】:Regex to match for all occurrences except when only one exists正则表达式匹配所有出现,除非只存在一个
【发布时间】:2019-01-03 23:16:32
【问题描述】:

我有这个示例字符串111:222:333。从中,我需要提取所有三个 : 分隔的数字。输出应该找到三个匹配项 - 111222333

我使用这个正则表达式来实现这一点:(?<=^|:)(\d+)(?=:|$)

但是,我需要此正则表达式仅在至少有 2 个匹配项时进行匹配。因此,111 不应该匹配,但 111,222,... 应该匹配。

我不能在 Java 中使用标准拆分函数,因为我的用例要求从数据库中动态读取正则表达式。

如何强制执行“至少两个匹配”条件?

【问题讨论】:

  • 试试(?<=\G(?!^):|^(?=\d+(?::\d+)+$))\d+
  • @WiktorStribiżew 这很好用!

标签: regex


【解决方案1】:

你可以使用

(?<=\G(?!^):|^(?=\d+(?::\d+)+$))\d+

regex demo

详情

  • (?&lt;=\G(?!^):|^(?=\d+(?::\d+)+$)) - 匹配字符串中两个替代位置中的任何一个的正向后视:
    • \G(?!^): - 上一次成功匹配后的位置和:
    • | - 或
    • ^(?=\d+(?::\d+)+$)) - 字符串开头,后跟 1+ 个数字,然后是 1 个或多个 : 序列和 1+ 个数字,直到字符串结尾
  • \d+ - 消耗 1 个或多个数字

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-12
    • 2010-09-09
    相关资源
    最近更新 更多