/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
Regulært udtryk
Fra : Kasper Johansen


Dato : 29-08-04 17:05

Hej gruppe.

Jeg sidder og leger lidt med regulære udtryk. Har læst en masse på nettet
men sidder lige fast og håber lidt på at der er nogle herfra der kan hjælpe.

Mit udtryk skal fjerne html-tags og det der stå imellem dem.

<?
$in_msg = "dette er en test <b>hejsa</b> test <i>hmm</i>";
$in_msg = preg_replace("/<+.+>+(.*)+(<\/)+.+>/", "", $in_msg);

echo $in_msg;
?>

Det var altså meningen at "hejsa" og "hmm" skulle være helt væk så der kun
stod "dette er en test test " tilbage. Det sker ikke.

Jeg tror det er fordi mit udtryk er det man kalder for "grådigt", og derfor
skal man (som jeg har forstået det) sætte et "?" ind et sted. Jeg har prøvet
op til flere gange men syntes stadig ikke at kunne gøre det rigtigt.

Nogen der kan hjælpe?

Mvh
Kasper Johansen



 
 
Jacob Atzen (29-08-2004)
Kommentar
Fra : Jacob Atzen


Dato : 29-08-04 17:52

"Kasper Johansen" <kasper@johansen.tdcadsl.dk> writes:

> Mit udtryk skal fjerne html-tags og det der stå imellem dem.

Du ved godt, der findes en indbygget php funktion til det?

> <?
> $in_msg = "dette er en test <b>hejsa</b> test <i>hmm</i>";
> $in_msg = preg_replace("/<+.+>+(.*)+(<\/)+.+>/", "", $in_msg);
>
> echo $in_msg;
> ?>
>
> Det var altså meningen at "hejsa" og "hmm" skulle være helt væk så der kun
> stod "dette er en test test " tilbage. Det sker ikke.

Prøv at smide U på som pattern modifier, den gør dit udtryk
"ungreedy". Altså:

$in_msg = preg_replace("/<+.+>+(.*)+(<\/)+.+>/U", "", $in_msg);

Jeg undrer mig iøvrigt over du skriver "<+.+>+" - plus betyder en eller
flere. I dit tilfælde ville du kunne klare dig med "<.+>", da HTML
tags ikke kan indeholde større- eller mindre end. Du kan desuden smide
parenteserne væk. De bruges kun, hvis du vil overføre indholdet til
din "replace" variabel. Så dit udtryk kan kortes ned til:

$in_msg = preg_replace("/<.+>.*<\/.+>/U", "", $in_msg);

--
Med venlig hilsen
- Jacob Atzen

Kasper Johansen (29-08-2004)
Kommentar
Fra : Kasper Johansen


Dato : 29-08-04 18:56

"Jacob Atzen" <jacob@aub.dk> skrev i en meddelelse
news:87r7ppc2g3.fsf@aub.dk...
> $in_msg = preg_replace("/<.+>.*<\/.+>/U", "", $in_msg);

Tusind tak. Ja jeg begyndte at læse op på det her igår for alvor, så jeg
syntes da at det skrider fremad.

Men tak for det hurtige svar.

Mvh
Kasper



Peter Brodersen (30-08-2004)
Kommentar
Fra : Peter Brodersen


Dato : 30-08-04 04:28

On 29 Aug 2004 18:51:40 +0200, Jacob Atzen <jacob@aub.dk> wrote:

>> Mit udtryk skal fjerne html-tags og det der stå imellem dem.
>
>Du ved godt, der findes en indbygget php funktion til det?

Også til indholdet mellem tags?

--
- Peter Brodersen

Memento mori!

Jacob Atzen (31-08-2004)
Kommentar
Fra : Jacob Atzen


Dato : 31-08-04 07:46

Peter Brodersen <usenet@ter.dk> writes:

> On 29 Aug 2004 18:51:40 +0200, Jacob Atzen <jacob@aub.dk> wrote:
>
> >> Mit udtryk skal fjerne html-tags og det der stå imellem dem.
> >
> >Du ved godt, der findes en indbygget php funktion til det?
>
> Også til indholdet mellem tags?

Doh. Min fejl.

--
Med venlig hilsen
- Jacob Atzen

Anders K. Madsen (30-08-2004)
Kommentar
Fra : Anders K. Madsen


Dato : 30-08-04 05:32



Peter Brodersen (30-08-2004)
Kommentar
Fra : Peter Brodersen


Dato : 30-08-04 06:57

On Mon, 30 Aug 2004 06:31:39 +0200, "Anders K. Madsen"
<madsen@lillesvin.linux.dk> wrote:

>Men i dette tilfælde ser jeg et problem med f.eks.:
> Denne <img src="blabla.png" alt="Laks" /> tekst vil måske ikke
> fungere korrekt.
>da den kun indeholder eet tag og derfor ikke matches af regex'en. (I
>hvert fald ikke den der blev givet tidligere i tråden.)

<[^>]+/\s*> burde løse det. Fx:

$in_msg = preg_replace("/<.+>.*<\/.+>|<[^>]+\/\s*>/U", "", $in_msg);

(omend jeg ikke kan huske, om blanktegn er tilladt mellem />-tegnene )

--
- Peter Brodersen

Memento mori!

Kristian Thy (02-09-2004)
Kommentar
Fra : Kristian Thy


Dato : 02-09-04 19:35

Peter Brodersen uttered:
> (omend jeg ikke kan huske, om blanktegn er tilladt mellem />-tegnene )

Der må gerne være et mellemrum: <br /> fx.

\\kristian
--
http://lpf.ai.mit.edu/Patents/knuth-to-pto.txt

Kristian Thy (02-09-2004)
Kommentar
Fra : Kristian Thy


Dato : 02-09-04 19:36

Kristian Thy uttered:
> Peter Brodersen uttered:
>> (omend jeg ikke kan huske, om blanktegn er tilladt mellem />-tegnene )
>
> Der må gerne være et mellemrum: <br /> fx.

Jeg modtager gerne donationer til en privat læselærer.

\\kristian
--
http://lpf.ai.mit.edu/Patents/knuth-to-pto.txt

Søg
Reklame
Statistik
Spørgsmål : 177501
Tips : 31968
Nyheder : 719565
Indlæg : 6408527
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste