【发布时间】:2020-10-12 13:18:14
【问题描述】:
我试图创建的正则表达式应该匹配任何 4 位数字中包含三个“8”的所有数字。我拥有的正则表达式仅匹配 15 个数字列表中的前 10 个数字。任何建议将不胜感激。
\b[0-9]*(?:8[0-9]*[0-9]?8|8[0-9]*[0-9]?8|8[0-9]*[0-9]?8)\b
测试数据:
8088 8188 8288 8388 8488 8808 8818 8828 8838 8848 8880 8881 8882 8883 8884
最后五个数字也应该匹配,但不要匹配。
【问题讨论】:
-
试试
\b(?=(?:[0-79]*8){3}[0-79]*\b)\d{4}\b或\b(?=\d{4}\b)(?:[0-79]*8){3}[0-79]*\b -
或
\b(?=(?:\d*8){3})\d{4}\b -
直接的问题是你允许第一个数字是任何数字。
-
它不需要修补 8888。Wiktor 解决方案完美运行。谢谢大家的帮助和解释。
-
输入中可以有其他任意长度的数字吗?否则,请考虑删除“四位数字”要求,以明确问题。
标签: regex