2016-08-07 43 views
0

Ich möchte die Subdomäne & Domain-Namen aus einem SPF Reccord mit dem Regex-PHP extrahieren.extrahieren Domain Subdomain von SPF Reccord mit PHP Regex Muster

$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>"; 
} 
} 

welche Art von Regex sollte ich einfach Domain & Sub-Domain wie _netblocks.google.com

Dank euch zu extrahieren verwenden.

+0

Versuchen Sie nicht, das Ganze mit einer Regex übereinstimmen. Halten Sie es einfach, lesen Sie die RFC-Spezifikation. Der Datensatz ist durch Leerzeichen getrennt, also tun Sie das zuerst, und behandeln Sie dann die verschiedenen Präfixe, bevor Sie zu den Domänen gelangen. Es würde mich nicht überraschen, wenn du eine Klasse finden könntest, um das schon zu tun - schau auf Packagist. – Synchro

Antwort

1

Ich konnte nicht klar bekommen, was Sie fragen. Aber hier, was ich denke, dass Sie brauchen:

$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

Das, was ich suche danke @Samed, es funktioniert für mich gut. Sie müssen nur die ":" - twodots aus dem Regex-Muster entfernen und es wird so sein. '$ regex ="/([\ w] *?) \\.? ([\ W] *?) \\. (". Implode (" | ", $ domainExts).")/";' –

+0

Alles klar, glücklich, dass dein Problem gelöst ist! – smddzcy

-1

Domäne: $ arr [0] [0]; Subdomain: $ arr [2] [0];

+0

Ich habe versucht, Ihre Regex-Muster, aber es verursacht mir ein kleines Problem, ohne jede Ausgabe. Warnung: preg_match(): Unbekannter Modifizierer 'g' –

+0

Die print_r haben ein leeres Array, die Regex hat keine Domäne aus der Zeichenfolge extrahiert. 'Feld (4) {[0] => Feld (0) {} [1] => Feld (0) {} [2] => Feld (0) {} [3] => Feld (0) { }} ' –

+0

Dieses Muster ist völlig nutzlos. Es scheint zu versuchen, URLs zu finden, die mit dieser Frage absolut nichts zu tun haben. – Synchro