PHP和高级正则表达式问题

时间:2016-08-14 18:07:22

标签: php regex

我正在尝试解析绑定DNS根区域文件中的域名列表。我的正则表达式适用于regex101.com(https://regex101.com/r/uP3dT7/2),但是在使用PHP和实时数据进行测试时,它找不到任何匹配项。

原因可能在哪里?我想在格式化的某处,但如果它在regex101.com中有用......

$re = "/(^\S+\.(?:eus|tld))\.\s*86400(?!.*?^\1\.\s*86400)/ms"; 
preg_match_all($re, $content, $matches);     
var_dump ($matches);

这是我的代码。也许问题在于正则表达式,如果没有,则是实时数据的格式化。

1 个答案:

答案 0 :(得分:0)

没有锚点,效果非常好:

<?php

$data = <<<DATA
 pblxare.eus.   86400   in  ns  ns1.cdmon.net. pblxare.eus. 86400   in  ns  ns2.cdmon.net. pblxare.eus. 86400   in  ns  ns3.cdmon.net. eginirribarre.eus.   86400   in  ns  alt.guebs.com. eginirribarre.eus.   86400   in ns   alt2.guebs.com. eginirribarre.eus.  86400   in  ns  alt3.guebs.com. n80i564smh8rfmcej1l.eus.    43200   in  nsec3   1   0   12  e5b2f7n ns n8g4vh050i5641l.eus. 43200   in  rrsig   nsec3   10  2 frgrgrht.eus. 86400
DATA;

$regex = "~(\S+\.(?:eus|tld))\.\s*86400(?!.*?\1\.\s*86400)~ms"; 

preg_match_all($regex, $data, $matches);
print_r($matches);

?>

请参阅a demo on ideone.com