Gå til innhold

ereg() - søke gjennom hele stringen


Anbefalte innlegg

Skrevet

Heisan sitter å pusler litt med ett skript for å søke gjennom en string etter e-mail adresser. Bruker ereg() funksjonen med denne regex'en

 

<?php
$regex = "^[\.a-zA-Z0-9_-]+@[\.a-zA-Z0-9_-]+\.[\.a-zA-Z]{2,6}$";
?>

 

det jeg lurer på er hvordan kan jeg sette denne regex'en til å søke etter mer enn en e-mail adresse? eller er det mulig? har forsøkt endel forskjellige løsninger, men er sluppet opp for ideer.

 

:thumbup: om noen har en løsning :yes:

Videoannonse
Annonse
Skrevet
Heisan sitter å pusler litt med ett skript for å søke gjennom en string etter e-mail adresser. Bruker ereg() funksjonen med denne regex'en

 

<?php
$regex = "^[\.a-zA-Z0-9_-]+@[\.a-zA-Z0-9_-]+\.[\.a-zA-Z]{2,6}$";
?>

 

det jeg lurer på er hvordan kan jeg sette denne regex'en til å søke etter mer enn en e-mail adresse? eller er det mulig? har forsøkt endel forskjellige løsninger, men er sluppet opp for ideer.

 

:thumbup:  om noen har en løsning  :yes:

5147305[/snapback]

 

ville kanskje brukt

 

$reqex = explode(" ",$regex);

foreach($reqex as $value)

{if(ereg("^[\.a-zA-Z0-9_-]+@[\.a-zA-Z0-9_-]+\.[\.a-zA-Z]{2,6}$",$valie)){$email[] = $value;}}

 

ikke testet...

Skrevet (endret)

hehe dårlig forklart :blush:

 

det jeg mente var å finne flere e-mail adresser i en string. stringen kan se slik ut:

 

$string = "blabla [email protected] blabla [email protected] [email protected] som du ser kan det være tekst biter som ikke er e-mail adresser her"

 

har prøvd denne varianten av regex'en uten store resultater:

 

$regex = "^([\.a-zA-Z0-9_-]+@[\.a-zA-Z0-9_-]+\.[\.a-zA-Z]{2,6})*$";
if ($match = ereg($regex, $string, $arr)) {
  foreach ($arr as value) {
     echo $value;
  }
}else{
  echo 'no no no...';
}

 

håpet med denne koden var å bruke "atoms" til å få regex'en til å søke gjennom resten av stringen og legge treffene inn i $arr og printe de ut.

 

edit: la til litt

Endret av LateFot
Skrevet (endret)
ville kanskje brukt

 

$reqex = explode(" ",$regex);

foreach($reqex as $value)

{if(ereg("^[\.a-zA-Z0-9_-]+@[\.a-zA-Z0-9_-]+\.[\.a-zA-Z]{2,6}$",$valie)){$email[] = $value;}}

 

ikke testet...

5147492[/snapback]

 

mjo vil jo være en mulighet, men det vil vil vel være lettere om ereg() alene kan hente ut treffene. om jeg skulle bruke " " som separator vil det bli en god del arrays som ikke inneholder e-mail adresser. jeg regner med å bruke denne for å hente ut e-mail adresser fra tekster som nyheter etc. hvor det er mye annen tekst i tillegg.

 

takker så mye for svar :thumbup:

Endret av LateFot
Skrevet
Da trenger du en av preg_ frunksjonene, f.eks. preg_grep()

5147785[/snapback]

 

var redd for det... da blir det loking og koking på PCRE regex (når man endelig hadde begynnt å skjønne POSIX regex :p ) men tusen takk for hjelpen :)

Skrevet

Det er ikke store forskjellen mellom ereg og preg, ta en kikk på denne:

 

$string = "bla bla [email protected] mer bla bla [email protected] litt mer bla bla før den siste adressen [email protected]";

preg_match_all("/([\.a-zA-Z0-9_-]+@[\.a-zA-Z0-9_-]+\.[\.a-zA-Z]{2,6})/i", $string, $matches);

var_dump($matches);

 

(merk: den tar utgangspunktet i den validering av adresser, jeg har ikke validert den eller kikket på den!)

Skrevet

aha, utifra php boken min så det ut som pcre og posix hadde helt forskjellige syntax.

 

får takke nok en gang for hjelpen, da løste du vist hele problemet mitt :w00t:

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...