我遇到了RegEx的问题。主要是我想创建一个过滤器,只在Google Analytics中找到这25个IP地址:
我首先想到我可以使用:
216\.54\.215\.([0-9]|[1][0-9]|[2][0-4])
但是正如你所看到的,它并没有捕捉到10-24的第二个数字。
然后我打开了显示空白,并注意到RegEx可能存在换行问题。因此,我尝试使用.
和[0-9]
在$
之后仅选择一个数字:
216\.54\.215\.([0-9]$|[1][0-9]|[2][0-4])
没有认出任何0-9,这很奇怪,因为我认为它会匹配一个数字[0-9]并在此之后结束,即$。假设这个我错了吗?
接下来,我打开显示空白,我看到每个IP地址都有换行符。我不知道为什么我决定尝试单词边界,但我决定将$
换成\b
。你知道什么,它有效。
216\.54\.215\.([0-9]\b|[1][0-9]|[2][0-4])
单词边界的定义是:匹配\w
的字符与\w
不匹配的字符(按任意顺序)之间的匹配,不消耗任何字符。
问题:
$
在我的第二个例子中不起作用?\b
有效?答案 0 :(得分:2)
216\.54\.215\.([0-9]|[1][0-9]|[2][0-4])+
最后添加的+
表示
匹配前一个元素一次或多次。 e.g。
模式:"是+" 匹配:" bee" in" be"," be"在"弯曲"
你可以更好地去寻找
216\.54\.215\.([0-9]|[1][0-9]|[2][0-4]){1,3}
然后你只会在最后选择3位数字,如果错误输入第4位数字,它就消除了错误的可能性。 (在你的情况下可能有用也可能没用)
通常
{ n , m }
与前一个元素匹配至少n次, 但不超过m次。模式" \ d {3,5}" 匹配" 166"," 17668" &安培; " 19302"在" 193024"
这将是你的结果。 Results
因此,您的案例的确切解决方案是使用
216\.54\.215\.([0-9]\b|[1][0-9]|[2][0-4]){1,2}\b
这意味着你只希望最后两位数限制为24位,然后边界完成,然后Regex不会从216.54.215.24
中选择216.54.215.2411
。
this是最终结果。
当我使用正则表达式时,我始终将this页面作为参考。
答案 1 :(得分:0)
这是你需要的正则表达式:
^216\.54\.215\.([0-9]|1[0-9]|2[0-4])$
答案 2 :(得分:0)
应该有效的正则表达式是:
^216\.54\.215\.(1?[0-9]|2[0-4])$
地址0-9由1?[0-9]
覆盖,其中1?
不匹配任何内容。
地址10-19由1?[0-9]
覆盖,其中1?
与十位数匹配。
地址20-24由2[0-4]
覆盖。