Haal email adressen uit een vervuilde lijst
Weten jullie of er ergens een script bestaat die uit een lijst alle email adressen kan halen?
Dus als je bv dit hebt:
"Kristof Peermans" [mailto:[email protected]]
Het schript zou dus eingenlijk uit email adres uit deze regel moeten halen..
Dank bij voorbaat!
Dus als je bv dit hebt:
"Kristof Peermans" [mailto:[email protected]]
Het schript zou dus eingenlijk uit email adres uit deze regel moeten halen..
Dank bij voorbaat!
Hiervoor heb je de preg_match (zie http://nl3.php.net/preg_match)
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?PHP
$email = array("\"Kristof Peermans\" [mailto:[email protected]]","\"Nils\" [mailto:[email protected]]");
extract_email($email);
function extract_email($email)
{
foreach($email as $value)
{
$stage1 = explode(":",$value);
$stage2 = explode("]",$stage1[1]);
echo $stage2[0]."<br>";
}
}
?>
$email = array("\"Kristof Peermans\" [mailto:[email protected]]","\"Nils\" [mailto:[email protected]]");
extract_email($email);
function extract_email($email)
{
foreach($email as $value)
{
$stage1 = explode(":",$value);
$stage2 = explode("]",$stage1[1]);
echo $stage2[0]."<br>";
}
}
?>
Output:
Aangepast, nu werkt hij met lijsten. Verder komen de tekens : en ] NOOIT in een email adres en NOOIT in een naam voor, dus zou het geen probleem moeten zijn.
Gewijzigd op 01/01/1970 01:00:00 door Nils Kuijpers
He Nils, het gaat om een lijst met emailadressen :)
Dit voorbeeld werkt idd met 1 regel. Maar het werkt toch ietsjes anders met meerdere regels en tekens.
Dit voorbeeld werkt idd met 1 regel. Maar het werkt toch ietsjes anders met meerdere regels en tekens.
preg_match() returns the number of times pattern matches. That will be either 0 times (no match) or 1 time because preg_match() will stop searching after the first match. preg_match_all() on the contrary will continue until it reaches the end of subject . preg_match() returns FALSE if an error occurred.
staat in redelijke koeie letters op php.net bij preg_match
staat in redelijke koeie letters op php.net bij preg_match
*Zucht*, heb je wel eens de functie gebruikt Thijs? :D
Je krijgt inderdaad een getal terug, maar je kan een waarde meegeven, zodat de resultaten in deze waarde worden gezet als array().
Hier een koeiegroot voorbeeld :D
Als je het goed doet krijg je netjes een array terug met de emailadressen.
Je krijgt inderdaad een getal terug, maar je kan een waarde meegeven, zodat de resultaten in deze waarde worden gezet als array().
Hier een koeiegroot voorbeeld :D
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
<?php
// get host name from URL
preg_match('@^(?:http://)?([^/]+)@i',
"http://www.php.net/index.html", $matches);
$host = $matches[1];
// get last two segments of host name
preg_match('/[^.]+\.[^.]+$/', $host, $matches);
echo "domain name is: {$matches[0]}\n";
?>
// get host name from URL
preg_match('@^(?:http://)?([^/]+)@i',
"http://www.php.net/index.html", $matches);
$host = $matches[1];
// get last two segments of host name
preg_match('/[^.]+\.[^.]+$/', $host, $matches);
echo "domain name is: {$matches[0]}\n";
?>
Als je het goed doet krijg je netjes een array terug met de emailadressen.
Gewijzigd op 01/01/1970 01:00:00 door Barman V
Nog even iets verder ontwikkeld:
Barman, kun je beargumenteren waarom preg_match hier beter is dan mijn methode? Ik geloof het wel hoor, maar ik vraag het me af ;)
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<?PHP
$email = array(
"\"Kristof Peermans\" [mailto:[email protected]]",
"\"Nils\" [mailto:[email protected]]");
foreach(extract_email($email) as $value)
{
echo $value."<br>";
}
function extract_email($email)
{
$array = array();
foreach($email as $value)
{
$stage1 = explode(":",$value);
$stage2 = explode("]",$stage1[1]);
$array[] = $stage2[0];
}
return $array;
}
?>
$email = array(
"\"Kristof Peermans\" [mailto:[email protected]]",
"\"Nils\" [mailto:[email protected]]");
foreach(extract_email($email) as $value)
{
echo $value."<br>";
}
function extract_email($email)
{
$array = array();
foreach($email as $value)
{
$stage1 = explode(":",$value);
$stage2 = explode("]",$stage1[1]);
$array[] = $stage2[0];
}
return $array;
}
?>
Barman, kun je beargumenteren waarom preg_match hier beter is dan mijn methode? Ik geloof het wel hoor, maar ik vraag het me af ;)
Omdat preg_match onder andere hiervoor gemaakt is. Het is gespecialiseerd in het ontleden van strings en is hierdoor ook sneller.
Inderdaad door middel van loops, functions en explodes kom je er ook wel. Met jouw functie kom je er absoluut ook, maar persoonlijker vind ik preg_match een stuk makkelijker, sneller en korter (qua code).
Tevens weet je niet hoe de lijst van Will er compleet uitziet. Op jouw manier ben je gebonden aan een vast patroon (de : en ]), met de preg_match niet.
Dit werkt bij jouw functie bijv niet:
"Kristof Peermans" [mailto:[email protected]]
"Nils" [mailto:[email protected]]
"Naam" [email protected]
"Naam" [email protected]]
Inderdaad door middel van loops, functions en explodes kom je er ook wel. Met jouw functie kom je er absoluut ook, maar persoonlijker vind ik preg_match een stuk makkelijker, sneller en korter (qua code).
Tevens weet je niet hoe de lijst van Will er compleet uitziet. Op jouw manier ben je gebonden aan een vast patroon (de : en ]), met de preg_match niet.
Dit werkt bij jouw functie bijv niet:
"Kristof Peermans" [mailto:[email protected]]
"Nils" [mailto:[email protected]]
"Naam" [email protected]
"Naam" [email protected]]
'Barman:
*Zucht*, heb je wel eens de functie gebruikt Thijs? :D
Je krijgt inderdaad een getal terug, maar je kan een waarde meegeven, zodat de resultaten in deze waarde worden gezet als array().
Hier een koeiegroot voorbeeld :D
Als je het goed doet krijg je netjes een array terug met de emailadressen.
Je krijgt inderdaad een getal terug, maar je kan een waarde meegeven, zodat de resultaten in deze waarde worden gezet als array().
Hier een koeiegroot voorbeeld :D
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
<?php
// get host name from URL
preg_match('@^(?:http://)?([^/]+)@i',
"http://www.php.net/index.html", $matches);
$host = $matches[1];
// get last two segments of host name
preg_match('/[^.]+\.[^.]+$/', $host, $matches);
echo "domain name is: {$matches[0]}\n";
?>
// get host name from URL
preg_match('@^(?:http://)?([^/]+)@i',
"http://www.php.net/index.html", $matches);
$host = $matches[1];
// get last two segments of host name
preg_match('/[^.]+\.[^.]+$/', $host, $matches);
echo "domain name is: {$matches[0]}\n";
?>
Als je het goed doet krijg je netjes een array terug met de emailadressen.
ja opzich wel, maar ik zal mijn antwoord verduidelijken.
"Nee, hij stopt inderdaad na 1 return. dat word ook uitgelecht in de php.net manual".
ik heb niet gezegt dat hij ook daadwerkelijk preg_match_all moest gaan gebruiken. ik zal de volgende keer mijn antwoord beter formuleren :)
Je kan evt deze regex wel gebruiken:
Allen, zeer hard bedankt voor alle moeite!
Beide methodes lijken goed te werken.. Dit zal mij zeer veel tijd besparen!
Bedankt!
Beide methodes lijken goed te werken.. Dit zal mij zeer veel tijd besparen!
Bedankt!




