|
| 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 |
| | |
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
| |
|
|