regex - 在 Google Analytics 中排除多个 IP 范围

标签 regex google-analytics

我一直在尝试排除 Google Analytics 中的四个 IP 范围(编辑:只有第三个八位字节的范围是 1-128。第四个是“静态”,如下所述)。我的正则表达式技能(谷歌分析可以利用)并不是最好的。我希望在这里获得一些有关如何构建我的正则表达式的帮助,以便它能够满足我的要求。

我想要排除的 IP 范围是:

10.130.1.0 - 10.130.128.0,

10.130.1.99 - 10.130.128.99

10.132.1.0 - 10.132.128.0

10.132.1.1 - 10.132.128.1.

正如您所看到的,有一些静态部分和一些更“动态”的部分。

我创建的完整正则表达式如下所示(将其分开以便于阅读,但实际上它在一行上):

^10.130.([1-9]|[1-9][0-9]|1([0-1][0-9]|2[0-8])).0|

10.130.([1-9]|[1-9][0-9]|1([0-1][0-9]|2[0-8])).99|

10.132.([1-9]|[1-9][0-9]|1([0-1][0-9]|2[0-8])).0|

10.132.([1-9]|[1-9][0-9]|1([0-1][0-9]|2[0-8])).1$

我做得对吗?我还没有真正完全掌握分组 (),或者如果我需要将不同范围的每个单独部分分组在一起,例如 (10\.130\.([1-9 ]|[1-9][0-9]|1([0-1][0-9]|2[0-8]))\.0),或者保持原样,没有()

我对它的分组是否正确,这是一个好方法吗?

最佳答案

确定适用的 IP 地址

问题中的 IP 地址范围很困惑,其意图是可能:

10.130.1.0 - 10.130.128.99
10.132.1.0 - 10.132.128.1

这个答案是基于这种情况的假设 - 我读过关于只想将范围应用于第三个八位字节的评论,但很可能这是一个误解(或者这确实是意图 - 但它是对于任何 future 的读者来说不太可能如此)。

作为正则表达式

IP范围可以表示为:

10.130.1.0 - 10.130.127.254*
10.130.128.0 - 10.130.128.99
10.132.1.0 - 10.132.127.254*
10.132.128.0 - 10.132.128.1

请注意,标有星号的两个范围涵盖了最后一个八位位组的整个范围,因此在任何数字都符合的模式中。因此,在伪正则表达式中,需要的是:

10.130.[1 to 127].*
10.130.128.[0 to 99]
10.132.[1 to 127].*
10.132.128.[0 or 1]

每个范围都需要是一个正则表达式,用于处理组成这些数字的数字。

1 到 127

有一到三位数字,用正则表达式处理时会有些复杂 - 但可以像这样分解:

[1-9] # 1-9
[0-9]{2} # 10-99
1[0-1][0-9] # 100 - 119
12[0-7] # 120-127

或者:

([1-9]|[0-9]{2}|1[0-1][0-9]|12[0-7])

0 到 99

这个很简单,因为它是一位或两位数字:

[0-9]{1,2}

0 或 1

也很简单:

[0-1]

一起:

因此,作为一个完整的正则表达式,整个范围可以表示为:

^10\.(
    130\.([1-9]|[0-9]{2}|1[0-1][0-9]|12[0-7])\.[0-9]{1,3} |
    130\.128\.[0-9]{1,2} |
    132\.([1-9]|[0-9]{2}|1[0-1][0-9]|12[0-7])\.[0-9]{1,3} |
    132\.128\.[0-1]
)$

请注意,最好将正则表达式锚定到字符串的末尾,否则是 IP 地址,例如

10.130.128.111
^^^^^^^^^^^^^

超出定义范围的将匹配,最后一位数字将被忽略。

简化假设

Google 不太可能提交无效的 IP 地址,因此可以对上述正则表达式进行一些简化 - [0-9][1-9] 可以被同等对待,这意味着:

[1-9] # 1-9
[0-9]{2} # 10-99

变成:

[0-9]{1,2} # 1-99, one or two digits

因此,正则表达式可以表示为稍微简单一点的:

^10\.(
    130\.([0-9]{1,2}|1[0-1][0-9]|12[0-7])\.[0-9]{1,3} |
    130\.128\.[0-9]{1,2} |
    132\.([0-9]{1,2}|1[0-1][0-9]|12[0-7])\.[0-9]{1,3} |
    132\.128\.[0-1]
)$

此外,[0-9] 可以写为 \d,这使得正则表达式稍微不那么冗长::

^10\.(
    130\.(\d{1,2}|1[0-1]\d|12[0-7])\.\d{1,3} |
    130\.128\.\d{1,2} |
    132\.(\d{1,2}|1[0-1]\d|12[0-7])\.\d{1,3} |
    132\.128\.[0-1]
)$

关于regex - 在 Google Analytics 中排除多个 IP 范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19655107/

相关文章:

google-analytics - Google Analytics(分析)自定义变量/值报告(如何?)

angularjs - 带有 Angular js 链接的 Google 跟踪代码管理器

asp.net - 如何在 ASP.NET 中跟踪已完成的文件下载

android - 使用多个 Activity 的 Google Analytics for Android

ios - 我怎么知道正则表达式的哪一部分与 Objective-c 匹配

javascript - jquery.validate.1.9.js - 验证忽略正则表达式中未列出的内容

python - 如何使用正则表达式查找字符串中的重复字符

Java正则表达式只找到一个匹配项

javascript - 为什么这个正则表达式模式没有传入 exec 方法?

google-analytics - 核心报告 API 和新的实时报告 API 之间有什么区别?