regex - perl 一行+正则表达式匹配部分单词

标签 regex linux perl shell ksh

我写了一段Perl代码,按照下面的规则匹配IP地址:

仅匹配前三个八位位组,而四个八位位组必须是有效的 0-255 ,除该数字外或“.”不能在第一个八位位组之前存在 和数字或“”也不能存在于四个八位字节之后

例子

 export IP=100.187.34

应该匹配的 IP 示例

:100.187.34.12:.10
IP=100.187.34.100$
AAA100.187.34.199BBB
address:100.187.34.210+

不应匹配的 IP 示例

 55.100.187.34.99
 .100.187.34..
 100.187.34.100.1
 100.187.34.2100
 1.100.187.34
 100.187.34.1.1

所以这是我的代码(不符合我的规则):

      echo [...]xxx.xxx.xxx.xxx[...]   |    perl  -pe 'print if  /(?<![\d.])\Q$ENV{IP}\E(?=\.(?:1?\d?\d|2[0-4][0-9]|25[0-5])(?!\d))/; '  

问题是我的代码几乎匹配任何数字

请建议我需要在我的代码中修复什么以便仅根据规则匹配 IP

最佳答案

以下是 O'Reilly 的正则表达式手册中 IP 正则表达式匹配的一些示例:

检查 IP 地址的简单正则表达式:

^(?:[0-9]{1,3}\.){3}[0-9]{1,3}$

用于检查 IP 地址的准确正则表达式:

^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}↵
(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$

从较长文本中提取 IP 地址的简单正则表达式:

\b(?:[0-9]{1,3}\.){3}[0-9]{1,3}\b

从较长文本中提取 IP 地址的准确正则表达式:

\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}↵
(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b

捕获 IP 地址的四个部分的简单正则表达式:

^([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})$

捕获 IP 地址的四个部分的准确正则表达式:

^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.↵
(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.↵
(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.↵
(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$

关于regex - perl 一行+正则表达式匹配部分单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16458180/

相关文章:

linux - 从 SOAPUI 访问服务器 (PUTTY) 上的日志

linux - 在 Bash Shell 中编写文件编辑脚本

windows - 如何在 Windows 上使用 Perl 的默认应用程序打开文件?

c# - 正则表达式在“在文件中查找”和“搜索当前文件”中的行为不同

c++ - 逗号分隔的正则表达式,除非逗号在括号内

Php正则表达式在字符串中的第一个全大写字母单词后插入字符

c - 在 Linux 上的 C 程序中从套接字描述符获取 struct socket*、struct sock *

regex - perl正则表达式仅将字符串中的完全匹配捕获到变量中

perl - &@ 对 sub 意味着什么?

javascript - 增加一个字符串。 (JS 或 PHP)