顺便说一下,这是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)。然而,仅仅为数字过滤表达式绝对不是关键,因为我绝不期望看到任何其他类型的数据,但这会进入这个领域。
答案 0 :(得分:2)
让我们通过正则表达式[^((12)|8)]
看看你想要做什么。在这里,您已在字符类内声明匹配除 (
)
|
1
2
{之外的任何内容{1}}。因此,这些字符的每个实例都将被丢弃。
<强> Result of [^((12)|8)]
强>
要不匹配8
和12
,您必须指定要匹配的内容。
正则表达式: 8
<强>解释强>
\b([02-9][0-9]|[0-9][013-9]|[0-79])\b
设置字边界仅匹配数字。
\b
匹配除[02-9][0-9]
之前的所有数字1
,2
。
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]|^
表示不是数字或字符串开头的字符。 (最后同样的事情)