如何排除特定的两位数字(恰好是" 12")?

时间:2016-03-30 23:38:10

标签: regex google-analytics

顺便说一下,这是Google Analytics正则表达式。

我想排除号码" 8"数字" 12" (十二)来自匹配。

这是迄今为止我能想到的最好的,但它不正确:

[^((12)|8)]

根据regexpal.com,这仍然不包括1,2和8而不是12和8。

编辑:要回答我的问题以下的评论,数据将始终采用单个或两位数字的形式(例如,1,2,3,4,5, 6,7,8,9,10,11,......,99)。然而,仅仅为数字过滤表达式绝对不是关键,因为我绝不期望看到任何其他类型的数据,但这会进入这个领域。

2 个答案:

答案 0 :(得分:2)

让我们通过正则表达式[^((12)|8)]看看你想要做什么。在这里,您已在字符类内声明匹配 ( ) | 1 2 {之外的任何内容{1}}。因此,这些字符的每个实例都将被丢弃。

<强> Result of [^((12)|8)]

要不匹配812,您必须指定要匹配的内容。

正则表达式: 8

<强>解释

    双方的
  • \b([02-9][0-9]|[0-9][013-9]|[0-79])\b设置字边界仅匹配数字。

  • \b匹配除[02-9][0-9]之前的所有数字12

  • 12匹配[0-9][013-9]2之外的所有号码,即1

  • 12匹配除[0-79]以外的所有号码。

  • 用于匹配任何案例的
  • 8更改。

<强> Regex101 Demo

答案 1 :(得分:1)

要匹配除8和12之外的任何数字(整数),可能的模式是:

[02-79][0-9]*|8[0-9]+|1([013-9][0-9]*|2[0-9]+)?

(请注意,这不是最短的,但替代方法按概率排序。)

但是如果你单独使用这个模式和一个包含12的字符串,它就会成功,只匹配1(或2)。要解决这个问题,必须锚定您的模式。

<强>锚

两种可能性:

1)您正在测试整个字符串是否为数字:

在这种情况下,您可以使用字符串锚点的开头和结尾来完成表达式:

^([02-79][0-9]*|8[0-9]+|1([013-9][0-9]*|2[0-9]+)?)$

2)您正在测试字符串是否包含数字:

大多数情况下,其他正则表达式引擎使用单词边界\b来执行此操作,但根据this document,似乎此功能不可用。因此,解决方法包括描述模式左侧和右侧的所有可能方案:

([^0-9]|^)([02-79][0-9]*|8[0-9]+|1([013-9][0-9]*|2[0-9]+)?)([^0-9]|$)

其中[^0-9]|^表示不是数字或字符串开头的字符。 (最后同样的事情)