Php 如何通过regex解析nslookup结果
我有两个不同的nslookup结果:Php 如何通过regex解析nslookup结果,php,regex,Php,Regex,我有两个不同的nslookup结果: Server: PROXY.LOCAL Address: 192.168.1.1 Name: google.com Addresses: 2a02:598:2::1168 77.75.77.168 及 我的正则表达式代码如下所示: $re = '~(?:Name:\s*\S+\s*)\K(?:\G(?!\A)|^Addresses:|^Address:)\s*\K\S\S\S+~m'; 问题是当地址:存在时,它将只返回第一个IP,
Server: PROXY.LOCAL
Address: 192.168.1.1
Name: google.com
Addresses: 2a02:598:2::1168
77.75.77.168
及
我的正则表达式代码如下所示:
$re = '~(?:Name:\s*\S+\s*)\K(?:\G(?!\A)|^Addresses:|^Address:)\s*\K\S\S\S+~m';
问题是当
地址:
存在时,它将只返回第一个IP,而不是新行上的第二个。您的方法的主要问题是您将匹配“锚定”在(?:Name:\s*\s+\s*)\K
模式。\K
运算符不会使前面的模式不使用,必须显示该文本才能进行匹配
您应确保图案符合以下方案:
(?:\G(?!\A)|<START_PATTERN>)<PATTERN_TO_CONSUME_AND_OMIT>\K<PATTERN_TO_EXTRACT>
看
相配
-上一个匹配的结尾((?:\G(?!\A)\R\h+^Name:\s*\s+\s*地址(?:es)?:)
)+换行符和1+水平空白字符(\G(?!\A)
)或(\h+
)以下模式的序列:
-行的开头^
-文字子字符串名称:
-0+空格\s*
-1+非空白字符\S+
-0+空格\s*
-文字子字符串地址
-可选的非捕获组匹配(?:es)?
子字符串1或0次es
-冒号:
-0+空格\s*
-匹配重置运算符(放弃所有到目前为止匹配的文本)\K
-1+非空白字符\S+
\G(?!\A)
之后添加了\h+
,以确保下一行以1+水平空格开头,以便在下一行以非空格字符开头时停止匹配
(?:\G(?!\A)|<START_PATTERN>)<PATTERN_TO_CONSUME_AND_OMIT>\K<PATTERN_TO_EXTRACT>
'~(?:\G(?!\A)\R\h+|^Name:\s*\S+\s*Address(?:es)?:)\s*\K\S+~m'