我试图创建的正则表达式应该与任何4位数中包含3个'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(?=d{4}b)(?:[0-79]*8){3}[0-79]*b
请参阅regex演示。
详细信息:
b
-一个词的边界(?=d{4}b)
-右边必须有4个数字,后面应该跟一个单词边界(?:[0-79]*8){3}
-除8
和8
之外的任何0或更多数字的三次出现[0-79]*
-除8
之外的任何0位或更多数字b
—字边界
如果保证数字是四位数字,那么您可以尝试以下操作:
b8*[0-79]8*b
要分析每个部件匹配的内容,您可以使用进行检查
b(8*)[0-79](8*)b
应该这样做。这将匹配4种模式中的任何一种。
([d888]|[8d88]|[88d8]|[888d])
您可能需要添加一个分隔符检查(在您的示例中是空格(,因为此模式将在空格之间匹配,从而为您提供更多的结果
b(d?8{3}d?)b
- 这使得单词绑定中的第一个和最后一个数字是可选的,使用
?
或{0,1}
- 在你的8加上量词,就可以精确地需要
{3}
的八位数 - 将
[0-9]
替换为d
Digit用于brewity - 假设你只有长度为4的数字。否则,使用不带可选数字的替代方案:
b(d8{3}|8{3}d)b