Avatar billede jette1 Nybegynder
03. juli 2002 - 22:40 Der er 10 kommentarer og
1 løsning

Brug af | og PHP's ereg()

Jeg vil finde ord/sætninger omgivet af "" eller <>, men jeg får kun: "Jette"

Ifølge min teori skulle $reg[0] indeholde "Jette" og $reg[1] skal indeholde <min@email.dk> ...

$reg[0] er god nok, men der er ikke noget i $reg[1] ... hvorfor? (den vil gerne finde <min@email.dk>, hvis <.*> står alene)

<?php
$mystr = "\"Jette\" <min@email.dk>";
ereg("\".*\"|<.*>",$mystr,$reg);
echo $reg[0]."<br>".$reg[1];
?>
Avatar billede webmasterdk Praktikant
03. juli 2002 - 22:59 #1
den printer også <min@mail.dk> ud, du akn bare ikke se det i din browser, se kildekoden til din side!
Avatar billede jette1 Nybegynder
03. juli 2002 - 23:02 #2
Ja, det tænkte jeg også selv på ... men desværre optræder den heller ikke i kilden:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
    <TITLE>[Ingen titel]</TITLE>
<META NAME="Generator" CONTENT="Stone's WebWriter 3.5">
</HEAD>
<BODY>

"Jette"<br>
</BODY>
</HTML>
Avatar billede webmasterdk Praktikant
03. juli 2002 - 23:15 #3
Hvad er det præcis du vil?
Hvis du vil adskille de to kan det gøres lettere med explode()...
<?php
$mystr = "\"Jette\" <min@email.dk>";
$reg = explode(" ", $mystr);
echo $reg[0]."<br>";
echo $reg[1];
?>
Avatar billede webmasterdk Praktikant
03. juli 2002 - 23:25 #4
Btw: Det sidste bliver skjult i koden! :)
Avatar billede jette1 Nybegynder
03. juli 2002 - 23:26 #5
Ja, det kan du have ret i ... det undrer mig bare at or (|) ikke virker som jeg regnede med ... burde det ikke virke? Hvis nej, ved du hvorfor?
Avatar billede jespernaur Nybegynder
03. juli 2002 - 23:29 #6
Hej Jette (længe siden!)

Du har det (forståelses-)problem, at i regulære udtryk betyder operatoren | (lodret streg) ENTEN det ene ELLER det andet. Det du har skrevet, vil altså matche ENTEN "Jette" mellem 2 stk gåseøjne, ELLER <min@email.dk> mellem < og > (whichever comes first). Hvis du på een gang vil have det fordelt ud i $reg[0] og $reg[1] etc., er du nødt til at bruge paranteser:

/(\".*\") (<.*>)/

Herved opnår du, at hele matchen er i $reg[0], $reg[1] indeholder det, der blev matchet i den første parantes, $reg[2] indeholder det, der blev matchet i den anden parantes.

Mvh
Jesper Naur
Avatar billede jette1 Nybegynder
03. juli 2002 - 23:53 #7
Hej Jesper... ja, det er længe siden :-)

Jeg kan godt se at har misforstået det med |, og nu har jeg prøvet det du skriver, men jæ kat fin' u' a det :-( ... nu får jeg slet ikke noget resultat ???

<?php
$mystr = "\"Jette\" <min@email.dk>";
ereg("/(\".*\")(<.*>)/",$mystr,$reg);
echo $reg[0]."<br>".$reg[1]."<br>".$reg[2];
?>
Avatar billede jespernaur Nybegynder
04. juli 2002 - 00:08 #8
Den signifikante forskel mellem mit og dit er, at jeg har et blanktegn mellem ) og (, hvorimod du har ingenting. Hvad du er nødt til at tage stilling til, er hvad der må eller skal være mellem de 2 dele af teksten, som du ønsker at opsamle. Resultatet af din stillingtagen må du så udtrykke i det, du skriver i det regulære udtryk, som det der er tilladt mellem ) og (.

Mvh
Jesper Naur

(og se nu at få fat i bogen "Mastering Regular Expressions" af Jeffrey Friedl - den er simpelthen god!)
Avatar billede jette1 Nybegynder
04. juli 2002 - 00:52 #9
Jamen, jamen... jeg prøvede først med mellemrum, og da det ikke virkede, forsøgte jeg uden.... Her er den den som jeg først forsøgte...

<?php
$mystr = "\"Jette\" <min@email.dk>";
ereg("/(\".*\") (<.*>)/",$mystr,$reg);
echo $reg[0]."<br>".$reg[1]."<br>".$reg[2];
?>

Det er meget sjovt du siger det med bogen... for det er faktisk lige nøjagtig den jeg har liggende her ved siden af mig, hihi! ... Jeg er bare ikke kommet igang med den endnu :-P
Til gengæld har jeg læst grundlæggende om regular expressions i "Learning Perl" (også fra O'Reilly), og det er faktisk meningen at jeg skal lære det her med regular expressions *suk* - jeg føler mig temmelig gumpetung på det her område...
Avatar billede jespernaur Nybegynder
04. juli 2002 - 17:07 #10
Der er det galt, at jeg altid tester sådan noget med en side, hvor jeg bruger
preg_match. Den forlanger / i starten og slutningen af det regulære udtryk, hvilket
ereg IKKE gør (det fremmer altså heller ikke forståelsen, at PHP har 2 sæt af 'næsten'
identiske regex-funktioner). Så hvis du retter til

<?php
$mystr = "\"Jette\" <min@email.dk>";
ereg("(\".*\") (<.*>)",$mystr,$reg);
echo $reg[0]."<br>".$reg[1]."<br>".$reg[2];
?>

burde det virke. (det blev for sent i går til at jeg fik set dit indlæg før nu)
Og det er jo alle tiders, at du allerede har bogen - nu skal du bare se at få
den åbnet (!).

Mvh
Jesper Naur
Avatar billede jette1 Nybegynder
04. juli 2002 - 18:50 #11
JUBIIIIIIIII! Nu virker det... :-))))

Du får hermed point ... Tusind tak for hjælpen!..
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester