我正在尝试从绑定区域文件中解析当前添加的域...
示例字符串
net. 86400 in rrsig nsec 5 1 86400
test-name.net. 86400 in rrsig nsec
testname.net. 86400 in rrsig nsec
我试过跟随正则表达式...
preg_match_all("/(\S+)\.\s+86400\s+in\s+rrsig/", $str, $matches);
返回
Array
(
[0] => Array
(
[0] => net. 86400 in rrsig
[1] => test-name.net. 86400 in rrsig
[2] => testname.net. 86400 in rrsig
)
[1] => Array
(
[0] => net
[1] => test-name.net
[2] => testname.net
)
)
它应该只返回以.net tld结尾的域。
答案 0 :(得分:0)
您还没有明确说明您想要的是什么,但您可以尝试以下方法。
preg_match_all("/\S+\.(?:net|tld)/", $str, $matches);
结果
Array
(
[0] => Array
(
[0] => test-name.net
[1] => testname.net
)
)
或者
$pattern = "/\S+\.(?:net|tld)\.(?:\t|\s)+86400(?:\t|\s)+in(?:\t|\s)+rrsig/";
preg_match_all($pattern, $str, $matches);
结果
Array
(
[0] => Array
(
[0] => test-name.net. 86400 in rrsig
[1] => testname.net. 86400 in rrsig
)
)
两个示例中使用的:?
使得该组不会被捕获,只匹配()
中的内容。这会降低preg_match_all
的结果,因此您不需要通过数组来获得所需内容。
修改强>
您可以使用向前看(?=)
来确保所有必需的内容都在那里,然后只选择您想要的部分。
$pattern =
"/(?=\S+\.(?:net|tld)\.(?:\t|\s)+86400(?:\t|\s)+in(?:\t|\s)+rrsig)\S+\.(?:net|tld)/"
;
preg_match_all($pattern, $str, $matches);
在示例中,所需内容为:
(?=\S+\.(?:net|tld)\.(?:\t|\s)+86400(?:\t|\s)+in(?:\t|\s)+rrsig)
,所需内容为:
\S+\.(?:net|tld)