Understanding why this RegEx doesn't work
所以我要创建一个regex,点击所有10.x.x.x地址。(SO 0.0.0.0/8)
我想到了上面的内容。当我在Regex测试网站上测试它时(我试过几次),我找不到匹配的。
据我所知:
它匹配10.x,然后添加上一个并查找x,然后是上一个,然后是x,直到达到完整的10.x.x.x。但是它似乎不起作用。
我相信d会碰到任何数字。
我不明白为什么失败了,因为这对我来说似乎是正确的。
regex测试是错误的,还是我遗漏了什么?
- 把^放在开头,$放在结尾,这意味着整行都必须被比赛消耗掉。确保数据中没有空格或
。/G通常意味着匹配线上的所有事件,否则它将在第一个事件停止。在这种情况下,这是没有意义的,因为模式是从行首^到行尾$的显式状态。
- 测试时,它与我尝试的任何地址都不匹配。(随机测试10次。地址)
- 这就是你想要的吗?
- stackoverflow.com/questions/2814002/…
- 你能发布一个链接到你的regexp测试显示它不匹配吗?
^10\.\d+\.\d+\.\d+$模式在字符串的开头与10匹配,然后是一个点,后跟1+任意数字(x 3次),最后是字符串的结尾。也就是说,这个regex可以与10.100000.234567.345567匹配。
匹配10.xx.xx.xxIPv4地址的regex可以写为
1
| /^10(?:\.(?:2[0-4]\d|25[0-5]|[01]?\d\d?)){3}$/ |
请参阅regex演示。这是一个删节和改编的IP地址,来自UltraPico Expresso。
细节:
- ^—字符串开始
- 10—文字10。
- (?:\.(?:2[0-4]\d|25[0-5]|[01]?\d\d?)){3}3个序列({3}属于:
- \.—文字点
- (?:2[0-4]\d|25[0-5]|[01]?\d\d?)3个备选方案:
- 2[0-4]\d—2,后面是0-4范围内的一个数字,还有一个数字(200-249)
- 25[0-5]—25后接0-5范围的数字(250-255)
- [01]?\d\d?—0或1(可选由于?的原因),后跟任意1位和可选1位(0-199)
- $—串尾
- 谢谢您。这就是我需要的。
- 实际上,我可以使用一些帮助,最后我想到的是:/^10(?:\.(?:2[0-4]\d|25[0-5]|[01]?\d\d?)){3}@domain.com$/gm,虽然它在测试中有效,但我不能让我的过滤器接受它。我想发生的是上面的regex是针对php的,我需要javascript(但不确定),您是否知道这些?我能想到的只是javascript转义字符可能是问题所在,但我不确定。我可能会联系我使用的工具的支持人员,询问他们是否有特定的regex格式。
- 我几乎可以肯定你可以使用^10([.](2[0-4][0-9]|25[0-5]|[01]?[0-9][0-9]?)){3}@domain[.]com$。在posix-bre中,您需要退出\{3\}
大多数答案都不能解释为什么regex不适用于op。
根据这一点,它将适用于IP地址,尽管它不是特定的IP地址格式。
I've added the m modifier so that the assertions (^ and $) match the start and end of each line (for testing multiple IP addresses).
如果您正在寻找特定的IP地址格式,那么Wiktor Stribi?ew的答案是正确的。
- 你所说的没有一个答案试图解释是什么意思?我的答案包含了一个清晰的解释,即op regex在开头匹配了什么,并且您添加的多行修饰符并没有为现实场景增加任何值,只对regex101.com上的一个演示增加了值。
- @ WiktorStribi?我很高兴你更新了答案。我现在可以更新我的了。
- 我想知道,因为我最后一次更新是在19:27:50,而你的答案是在19:31:30发布的。实际上,多行模式可能不是这里的重点。充其量你可以猜到op在regex中的拼写错误。
- @ WiktorStribi?ew也许我的页面在我发布时没有显示你的答案:/但是你是对的,多行不是重点,因此"用于测试多个IP地址"
如果您试图匹配的地址类似于10.123.123.123/1
试试这个
1
| 10\.\d{1,3}\.\d{1,3}\.\d{1,3} |
如果您的地址需要占用整条线路,并在线路上留下空位,那么:
1
| ^10\.\d{1,3}\.\d{1,3}\.\d{1,3}$ |
这将匹配每个值的值超过255的地址。如果要限制这些值,它会变得更复杂一些。
- 我匹配的内容不需要包括/8。
- @肖恩,你的regexp明确禁止/8在最后。
- 我去掉了末尾匹配/的部分。
我宁愿和这个regex一起验证IP地址
10.\d{1,3}.\d{1,3}.\d{1,3}
- 请注意,这仍然只会执行部分验证。例如,10.999.12.14将通过验证,但不是合法的IP地址…
- war10ck是对的,这个regex也允许不可能的IP地址。Wiktor Stribi的解决方案?电子战是正确的。
- 这只是为了在第一眼就匹配一个IP地址。当然,这种反应并不像需要的那么准确,但能满足基本需求。