2016-08-07 2 views
0

Я хочу извлечь доменное имя домена & из spf reccord с использованием регулярного выражения php.извлечение домена поддомена из spf reccord с php regex pattern

$spfreccord= ' v=spf1 include:smtproutes.com include:smtpout.com ip4:46.163.100.196 ip4:46.163.100.194 ip4:85.13.135.76 ip4:178.255.156.110 ip4:188.172.204.21 ip4:178.255.154.52 ip4:188.172.233.6 ip4:37.252.230.29 ip4:217.146.22.37 ~all'; 
spfreccord2="v=spf1 include:_netblocks.google.com include:_netblocks2.google.com include:_netblocks3.google.com ~all"; 
$regexdomain = '/\s*([-a-z0-9]+\.)+' . implode("|", $extensionList) . '\s*/i'; 
preg_match_all($regexdomain, $spfreccord,$matchesdom); 
// echo the result 



foreach ($matchesdom as $ke) { 
foreach ($ke as $domspf) { 

    echo $domspf; 
    echo "<br>"; 
} 
} 

какого рода регулярного выражения я должен использовать, чтобы извлечь простой домен & субдомны как _netblocks.google.com

Спасибо вам, ребята.

+0

Не пытайтесь совместить все это с регулярным выражением. Держите его простым, прочитайте спецификацию RFC. Запись разделяется пробелом, поэтому сделайте это сначала, затем обработайте различные префиксы, прежде чем вы попадете в домены. Меня не удивило бы, если бы вы могли найти класс, чтобы сделать это уже - посмотрите на упаковщика. – Synchro

ответ

1

Я не мог понять, что вы просите. Но вот что мне нужно:

$spfreccord ='v=spf1 include:smtproutes.com include:smtpout.com ip4:46.163.100.196 ip4:46.163.100.194 ip4:85.13.135.76 ip4:178.255.156.110 ip4:188.172.204.21 ip4:178.255.154.52 ip4:188.172.233.6 ip4:37.252.230.29 ip4:217.146.22.37 ~all'; 
$spfreccord2 ="v=spf1 include:_netblocks.google.com include:_netblocks2.google.com include:_netblocks3.google.com ~all"; 

$domainExts = ["com", "net", "org", "io"]; // fill according to your needs 

$regex = "/:([\w]*?)\\.?([\w]*?)\\.(".implode("|", $domainExts).")/"; 

preg_match_all($regex, $spfreccord2, $output); 
// $output[1] => Subdomains. 
// $output[2] => Domains 
// $output[3] => Domain extension 

var_dump($output); 
/* 
array(4) { 
    [0] => 
    array(3) { 
    [0] => 
    string(22) ":_netblocks.google.com" 
    [1] => 
    string(23) ":_netblocks2.google.com" 
    [2] => 
    string(23) ":_netblocks3.google.com" 
    } 
    [1] => 
    array(3) { 
    [0] => 
    string(10) "_netblocks" 
    [1] => 
    string(11) "_netblocks2" 
    [2] => 
    string(11) "_netblocks3" 
    } 
    [2] => 
    array(3) { 
    [0] => 
    string(6) "google" 
    [1] => 
    string(6) "google" 
    [2] => 
    string(6) "google" 
    } 
    [3] => 
    array(3) { 
    [0] => 
    string(3) "com" 
    [1] => 
    string(3) "com" 
    [2] => 
    string(3) "com" 
    } 
} 
*/ 
+0

Это то, что я ищу, спасибо @Samed, это работает для меня хорошо. вам просто нужно удалить «:» twodots из шаблона регулярного выражения, и все будет так. '$ regex ="/([\ w] *?) \\.? ([\ W] *?) \\. (". Implode (" | ", $ domainExts).")/";' –

+0

Хорошо, рад, что ваша проблема решена! – smddzcy

-1
 preg_match_all('/(ftp|http|https):\/\/(.*?)[\.][a-zA-Z]{1,3}(.*?)/',$str_search,$arr,PREG_PATTERN_ORDER); 
print_r($arr); 

Домен: $ arr [0] [0]; Субдомен: $ arr [2] [0];

+0

Я попробовал ваш шаблон регулярного выражения, но это вызывает у меня небольшую проблему, без вывода. Предупреждение: preg_match(): Неизвестный модификатор 'g' –

+0

print_r имеет пустой массив, регулярное выражение не извлекало ни одного домена из строки. 'array (4) {[0] => array (0) {} [1] => array (0) {} [2] => array (0) {} [3] => array (0) { }} ' –

+0

Этот шаблон абсолютно бесполезен. Кажется, он пытается сопоставить URL-адреса, которые не имеют абсолютно никакого отношения к этому вопросу. – Synchro

Смежные вопросы