Avatar billede Slettet bruger
15. maj 2004 - 21:51 Der er 29 kommentarer og
1 løsning

Hjælp til reg exp

Hej!

Jeg skal bruge hjælp til at omforme

<IMG src="http://localhost/cm3/cms/skriv_knap.php?tekst=Her er en grafisk overskrift&amp;farve=&amp;bgfarve=FFFFFF&amp;font=trebucbd.ttf&amp;stoerrelse=10" border=0>

til

Her er en grafisk overskrift

Det eneste der kan ændre sig er de forskellige værdier som variablerne indholder (f.eks. farve og bgfarve)
Avatar billede Slettet bruger
15. maj 2004 - 22:52 #1
Hvad mener du med "grafisk overskrift"? Et billede med tekst på?

Og hvad har det med reg exp at gøre?
Avatar billede Slettet bruger
15. maj 2004 - 22:58 #2
Jeps, det er et billede jeg selv laver gennem GDLib.

ovenstående kode ligger i en DB, men det er ikke så smart hvis jeg vil lave en teaser i et nyhedsscript, for så mangler halvdelen af koden, og billedet går i smadder.

Det jeg vil er at fjerne
<IMG src="http://localhost/cm3/cms/skriv_knap.php?tekst=

og
&amp;farve=&amp;bgfarve=FFFFFF&amp;font=trebucbd.ttf&amp;stoerrelse=10" border=0>

fra denne tekst.
Avatar billede Slettet bruger
15. maj 2004 - 23:35 #3
Kan du bruge denne stump?

$original='<IMG src="http://localhost/cm3/cms/skriv_knap.php?tekst=Her er en grafisk overskrift&amp;farve=&amp;bgfarve=FFFFFF&amp;font=trebucbd.ttf&amp;stoerrelse=10" border=0>';

preg_match("/<IMG src="http://localhost/cm3/cms/skriv_knap.php?tekst=([^&]*)&/", $original, $resultat);

echo $resultat[1]
Avatar billede Slettet bruger
15. maj 2004 - 23:52 #4
Ja, bortset fra at det også gerne skulle virke på en vilkårlig server, altså uden localhost/cm3 osv...
Avatar billede alvion Nybegynder
16. maj 2004 - 00:02 #5
Sandbox -> Den kan vel gøres meget enklere:

$original='<IMG src="http://localhost/cm3/cms/skriv_knap.php?tekst=Her er en grafisk overskrift&amp;farve=&amp;bgfarve=FFFFFF&amp;font=trebucbd.ttf&amp;stoerrelse=10" border=0>';

preg_match("/tekst=([^&]*)&/", $original, $resultat);
echo $resultat[1];

Så slipper man også for at skulle escape / og " (det havde du ikke gjort i dit eksempel).
Avatar billede Slettet bruger
16. maj 2004 - 00:38 #6
Det virker!

Men...

Der kan også være tekst både før og efter dette img tag:

$original='Her er der noget tekst<IMG src="http://localhost/cm3/cms/skriv_knap.php?tekst=Her er en grafisk overskrift&amp;farve=&amp;bgfarve=FFFFFF&amp;font=trebucbd.ttf&amp;stoerrelse=10" border=0> og her er der mere';
Avatar billede Slettet bruger
16. maj 2004 - 00:43 #7
Alvion, ja, jeg havde lige glemt lidt.

el_barto: Her er en mere generel udgave:

$original='Hygge <IMG src="http://localhost/cm3/cms/skriv_knap.php?tekst=Her er en grafisk overskrift&amp;farve=&amp;bgfarve=FFFFFF&amp;font=trebucbd.ttf&amp;stoerrelse=10" border=0> hejsa';

preg_match('/<IMG src="[^?]*\?tekst=([^&]*)&/i', $original, $resultat);

echo $resultat[1];
Avatar billede Slettet bruger
16. maj 2004 - 00:45 #8
Eller hvis det altid er det samme script, der bliver kaldt til billedet:

$original='Hygge <IMG src="http://localhost/cm3/cms/skriv_knap.php?tekst=Her er en grafisk overskrift&amp;farve=&amp;bgfarve=FFFFFF&amp;font=trebucbd.ttf&amp;stoerrelse=10" border=0> hejsa';

preg_match('/<IMG src="[^?]*skriv_knap\.php\?tekst=([^&]*)&/i', $original, $resultat);

echo $resultat[1];

Det kræver bare at tekst er den første parameter i URLen for at virke.
Avatar billede Slettet bruger
16. maj 2004 - 00:47 #9
Men hvis du kan være sikker på, at der ikke står tekst= i selve teksten, så kan du godt bruge Alvions forslag.
Avatar billede Slettet bruger
16. maj 2004 - 00:49 #10
ehm...det er mig der ikke forklarer mig godt nok, det er jeg meget ked af.

Men...teksten før og efter img tagget skal blive hvor den er.

Så det bliver Hygge Her er en grafisk overskrift hejsa
Avatar billede Slettet bruger
16. maj 2004 - 01:17 #11
Skidt med det, den klarer vi også.

$original='Hygge <IMG src="http://localhost/cm3/cms/skriv_knap.php?tekst=Her er en grafisk overskrift&amp;farve=&amp;bgfarve=FFFFFF&amp;font=trebucbd.ttf&amp;stoerrelse=10" border=0> hejsa';

$ny = preg_replace('#<IMG src="<IMG src="[^?]*?tekst=([^&]*)&[^>]>#i','$1',$original);

echo $ny;
Avatar billede Slettet bruger
16. maj 2004 - 01:19 #12
Muligvis skal du sætte mellemrum før og efter $1 i den lille streng, for hvis der ikke altid er mellemrum uden om <img>-taggen.
Avatar billede Slettet bruger
16. maj 2004 - 01:43 #13
hmm...nu virker det ikke :/
Avatar billede Slettet bruger
16. maj 2004 - 02:04 #14
Nej, for jeg er en skovl. Jeg havde glemt at slette lidt. Prøv med denne:

$original='Hygge <IMG src="http://localhost/cm3/cms/skriv_knap.php?tekst=Her er en grafisk overskrift&amp;farve=&amp;bgfarve=FFFFFF&amp;font=trebucbd.ttf&amp;stoerrelse=10" border=0> hejsa';

$ny = preg_replace('#<IMG src="[^?]*?tekst=([^&]*)&[^>]>#i','$1',$original);

echo $ny;
Avatar billede Slettet bruger
16. maj 2004 - 12:50 #15
Ikke for at være irriterende, men det virker heller ikke.

;)
Avatar billede Slettet bruger
16. maj 2004 - 18:50 #16
OK, nu gider jeg ikke mere bøvl med dig ;-)
(Så derfor har jeg afprøvet, så denne her ved jeg virker)

$original='Hygge <IMG src="http://localhost/cm3/cms/skriv_knap.php?tekst=Her er en grafisk overskrift&amp;farve=&amp;bgfarve=FFFFFF&amp;font=trebucbd.ttf&amp;stoerrelse=10" border=0> hejsa';

$ny = preg_replace('/<IMG src="[^?]*\?tekst=([^&]*)&[^>]*>/i','$1',$original);

echo $ny;

Bemærk forresten, at den er ligeglad med om IMG er med store eller små bogstaver, til gengæld er den også ligeglad med om ?tekst= er med store eller små.
Avatar billede Slettet bruger
16. maj 2004 - 21:08 #17
Nu virker det, måske du lige kunne tilføje den finte at hvis der er en alt="" tekst skal den også smides ud?

Håber du ikke synes jeg er for krævende, men jeg kom lige i tanke om at det også skulle med:

$original='Hygge <IMG src="http://localhost/cm3/cms/skriv_knap.php?tekst=Her er en grafisk overskrift&amp;farve=&amp;bgfarve=FFFFFF&amp;font=trebucbd.ttf&amp;stoerrelse=10" border=0 alt="Her er alt teksten"> hejsa';
Avatar billede Slettet bruger
16. maj 2004 - 21:28 #18
Her kommer en ny udgave. Den bruger arrays til søg/erstat-koderne, og den virker både hvis der er en alt-tekst og hvis der ikke er.

$soeg[]='/<IMG src="[^?]*\?tekst=([^&]*)&[^>]*alt="([^"]*)"[^>]*>/i';
$erstat[]=' $1 $2 ';

$soeg[]='/<IMG src="[^?]*\?tekst=([^&]*)&[^>]*>/i';
$erstat[]=' $1 ';

$ny = preg_replace($soeg,$erstat,$original);
Avatar billede Slettet bruger
16. maj 2004 - 21:40 #19
Ja ok...jeg ved ikke hvorfor, men hvis alt teksten står som det første i img tagget virker det ikke. Det virker hvis det står som det sidste
Avatar billede Slettet bruger
16. maj 2004 - 21:45 #20
Ja, det virker kun, hvis src er den første (alt behøver ikke være sidst - bare den er efter src), men hvis du vil have det, kan jeg godt lave det så den er ligeglad med rækkefølgen.
Avatar billede Slettet bruger
16. maj 2004 - 21:47 #21
Problemet er at jeg bruger en MS WYSIWYG online editor der åbenbart selv smider alt ind som det forreste :/ Det er lidt mystisk, men sådan er det jo med MS
Avatar billede Slettet bruger
16. maj 2004 - 21:58 #22
$soeg[]='/<img\s[^>]*src="[^?]*\?tekst=([^&]*)&[^>]*\salt="([^"]*)"[^>]*>/i';
$erstat[]=' $1 $2 ';

$soeg[]='/<img\s[^>]*alt="([^"]*)"[^>]*\ssrc="[^?]*\?tekst=([^&]*)&[^>]*>/i';
$erstat[]=' $2 $1 ';

$soeg[]='/<IMG\s[^>]*src="[^?]*\?tekst=([^&]*)&[^>]*>/i';
$erstat[]=' $1 ';

$ny = preg_replace($soeg,$erstat,$original);

Denne gang har jeg ikke testet, men det burde virke.
Avatar billede Slettet bruger
16. maj 2004 - 22:14 #23
Super, nu er det helt perfekt. Tak for din tålmodighed, jeg har svært ved at gennemskue de regulære udtryk, det må jeg en dag få læst lidt op om :)
Avatar billede Slettet bruger
16. maj 2004 - 22:26 #24
Det vil være en god ide. Man kan lave mange sjove ting med dem.

Bare for sjov: Hvis du vil have en slags censur på siden, kan det sagtens indbygges også. Bare tilføj noget i stil med:

$soeg[]='/fuck/i';
$erstat[]='****';

Så er der et grimt ord mindre på siden.
Avatar billede Slettet bruger
16. maj 2004 - 22:28 #25
hehe...det er i et CMS hvor administrator selv indtaster teksten, så må han selvom hvad han skriver.

Men meget skæg ide at gemme til en anden gang :)
Avatar billede Slettet bruger
16. maj 2004 - 22:32 #26
Min bror havde en overgang en tendens til at skrive ahve i stedet for have. Den slags vil man også kunne lave autokorrektur på ;-) (Men det er nok smartere at gøre det ved input i stedet for ved udskrift.)
Avatar billede Slettet bruger
16. maj 2004 - 22:34 #27
hehe...en slags slavekontrol :)

Kunne hurtigt blive et stort arbejde at lave en ordbog
Avatar billede Slettet bruger
16. maj 2004 - 22:39 #28
Hvis man skal bruge en ordbog, henter man den da bare på http://da.speling.org der er ingen grund til at skrive den selv.

Men jeg tænkte nu også bare på noget, som retter ens egne hyppigste stavefejl
Avatar billede alvion Nybegynder
17. maj 2004 - 09:51 #29
sandbox -> Jeg har ikke prøvet det, men mon ikke en kombination af ordbogen og SoundEx algoritmen kunne anvendes til at fange fejl som "ahve" mv.?
Avatar billede Slettet bruger
17. maj 2004 - 16:20 #30
alvion -> Tjoh, måske

el_barto -> Jeg har lige en lille "bonusoplysning" til dig. Hvis du har et array med tekster, der skal undersøges af den regex, kan du bare smide det som $original i preg_replace, og så får du det rettede array ud som $ny.
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
Vi tilbyder markedets bedste kurser inden for webudvikling

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