Avatar billede vis399cll Nybegynder
21. januar 2003 - 14:30 Der er 26 kommentarer

Simpelt Reg.Ex <EM>([/EM].*?)<\/html> (til ASP)

Det jeg skal er at fjerne ikke afsluttet html tags med reg.exs og ASP.

Det skal også sige at jeg er total ny til Reg.ex

Eksempel på kode/strengen:
-------------------------------------------------
<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.0 Transitional//DA'>
<html>
<head>
    <title> </title>
</head>
   
<body marginwidth="0" marginheight="0" leftmargin="0" topmargin="0"><A NAME=DOCTOP></A>

<TABLE>
  <TR>
  <TD>                     

Noget noget noget

<OL>
    <LI>sdaf<I>bla bla bla</I>
    <LI>sdf
</OL>

<!-- Her er kode der skal væk -->

<UL>
<LI><I>

<!-- Stop -->

<br>

</TD>
<TD></TD>
</TR>
  <TR>
<TD></TD>
<TD></TD>
</TR>
  <TR>
<TD></TD>
<TD></TD>
</TR>
</TABLE>

<a name="BOTTOM"></a>
</body>
</html>
---------------------------------------------

Jeg har prøvet med denne kode for at fjerne <I> tags men den virker ikke!

Gobal er på
ignore er af (det kan den godt være koderne er skrevet ens, altid)

regEx.Pattern = "<I>([^<\/I>]*?)<\/html>" ' Dette er pattern, der skal søges efter
MakeHTMLKorect = regEx.Replace( MakeHTMLKorect, "$1</html>" ) ' Foretag selve erstatningen

Det jeg prøver på er finde forekomster hvor <I>efterfølge af en bunke ukendte ting, men uden </I> og afsluttes med </html>
Avatar billede erikjacobsen Ekspert
21. januar 2003 - 14:44 #1
Jeg kan godt fortælle dig hvad der ikke virker, men jeg mener ikke
løsning bør være med regulære udtryk, der ikke kan "tælle". Hvad med

<i> ikke ok <i>ok</i>  ... hvad skal fjernes der?

Men ét af dine problemer:  [^<\/I>]  angiver *ikke* at strengen </I>
ikke må forekomme. Det betyder blot at ingen af tegnene < > / I må
forekomme.
Avatar billede vis399cll Nybegynder
21. januar 2003 - 15:00 #2
oki

>> <i> ikke ok <i>ok</i>  ... hvad skal fjernes der?
Denne fejl kommer ikke til at optrede, så det er ikke noget problem

Hvordan laver man så et regulært udtryk hvor man kan sige at </I> ikke skal være med?
Avatar billede vis399cll Nybegynder
21. januar 2003 - 15:02 #3
Men hvis du har en kode der også kan fjerne <i> ikke ok <i>ok</i>  den forkerte <i> her så må du da gerne komme med den, så skal jeg nok give dig en bunke point, hvis du hungre efter det. =)
Avatar billede vis399cll Nybegynder
21. januar 2003 - 15:07 #4
Evt. hvis du har en side hvor jeg evt. kan læse noget mere om reg.ex. Jeg har været nettet rundt, og jeg synes ikke at der er så mange gode sider eller forums rundt reg.ex. Har læst en masse, men det virker som om at det eneste der er at gøre er at prøve det for at lære det. (som så meget andet Programmering)
Avatar billede jespernaur Nybegynder
21. januar 2003 - 17:12 #5
Det er godt nok en bog, men den er altså god: "Mastering Regular Expressions" af Jeffrey Friedl, udgivet af O'Reilly
Avatar billede vis399cll Nybegynder
21. januar 2003 - 17:24 #6
Hey tak, jeg snakket lige før med mine chefer på arbejde og de sage at jeg skulle finde en bog om det, for jeg er ved at gå helt død på reg.ex.

Nu har jeg en titel så slipper jeg at gå ud og lede.

Btw. Du sidder ikke tilfeldigt og savner et arbejde?
Avatar billede jespernaur Nybegynder
21. januar 2003 - 17:38 #7
Der var du heldig, når cheferne siger god for den slags, ryster de vel også op med pengene!
Avatar billede vis399cll Nybegynder
21. januar 2003 - 17:47 #8
Selvfølgelig gør de det. =)

Men kan man lave et regulært udtryk, hvor man kan gøre det jeg vil over?

Finde en streg hvor </I> ikke optreder.
Avatar billede erikjacobsen Ekspert
21. januar 2003 - 18:04 #9
Jeg tror ikke det kan gøres med et regulært udtryk,
men måske fordi jeg ikke forstår dit ønske præcist nok.

Jeg ville nok ikke have nerver til selv at gøre det i ASP.
Avatar billede vis399cll Nybegynder
22. januar 2003 - 09:05 #10
Dam så må jeg bruge Instr og Mid, baderrr.

Der er ikke så meget a misforstå. Hvis man kikker på HTMl koden jeg har lagt ind over er der tre html koder der skal væk, på den ene eller den anden måde!
Avatar billede erikjacobsen Ekspert
22. januar 2003 - 09:20 #11
Jeg vil nu påstå, at det stadig er uklart. I dit tilfælde i spørgsmålet
er det klart nok for <ul> og <i>, men <li> kan du ikke bare fjerne.
Jo, det ene sted, måske - men i den rigtige <ol> ovenover er de jo
heller ikke afsluttede, og de skal vist ikke fjernes.

Du bør gøre dig selv den tjeneste at definere klart og tydeligt hvad
dine præmisser er.

Om du nu bruger regulære udtryk eller instr osv gør nok ikke det helt
store. Jeg mener du skal bruge en stak af tags for at kunne afgøre hvilke
der hænger sammen med hvilke.

Forøvrigt: gør det noget der er for mange </...> sluttags? Mig bekendt
ignoreres de alle af browserne, hvis der ikke er noget de passer med.
En HTML-validator vil brokke sig, men for en almindelig bruger gør det
da vist ingen forskel.

PS: Hvad skal det egentlig bruges til ?
Avatar billede vis399cll Nybegynder
22. januar 2003 - 09:56 #12
Du ramte sømmet, det skal være html korrekt og igennem en validator.

Alle koderne (maskin koder) er ens, og fejlen er den samme. (Man kunne selvfølgelig rette fejlen der den bliver lavet, men det kan jeg ikke, pga. nogle tåbelige ting!)
Der er nogle koder i bunden som skal fjernes fordi de ikke er afsluttet. Derfor behøver jeg kun at lede efter koder som ikke er afsluttet.

Det fedeste havde klart været at den kunne tjecke alle koder om de er startet og lukket rigtigt, som en validator kan, og fjerne alle ikke rigtige tags. Det vriker bare som et større projekt.

Jeg kan godt se at mit overstående kode eksempel er dårligt. Her er et nyt, uden design rundt, for jeg kan godt komme til koden før det bliver kastet rundt:
__________________________________________________________________________

        dsafasdg<BR>
        <H2>adfgbadsff</H2>
        <U>va</U>
        <!-- Koder der skal fjernes -->
        <I><U>
                <!-- Stop -->
_____________________________________________________________________

Håber det hjælper, jeg tror bare jeg skal tilbage til tegne brettet og finde ud af en anden måde at løse det på. Jeg køber dog nok stadig en dog om Reg.ex, fordi der er mange tilfælde hvor jeg kan bruge det.
Avatar billede erikjacobsen Ekspert
22. januar 2003 - 10:02 #13
Ok - det er ikke det generelle problem vi løser.... Det var da godt...

Det er ikke sådan at de altid ser ens ud? Eller bare har nogenlunde samme
struktur? Eller altid står lige før eller lige efter noget bestemt?
Avatar billede vis399cll Nybegynder
22. januar 2003 - 10:23 #14
Hejsa
Der er ikke noget specielt før dem.
Efter koderne er der ingen ting hvis jeg tager det før jeg lægger design koder på. Jeg kan evt. lægge en dumme kode i enden, så der er et fix punkt.

Selve koderne kan være: <P,<EM,<I,<FONT,<U,<BLOCKQUOTE,<PRE,<A,<STRONG,
Avatar billede erikjacobsen Ekspert
22. januar 2003 - 10:26 #15
Betyder det at du i en streng som denne:

  "<b>...<i>..</i>...</b><p><em><font ...>"

bare kan fjerne alle starttags der står til slut i strengen? Dvs.
"<p><em><font...>"? For det tror jeg godt vi kan klare med ét reg.exp.
Avatar billede vis399cll Nybegynder
22. januar 2003 - 10:32 #16
Det stemmer, problemet er bare f.eks. <IMG SRC=...>
Avatar billede erikjacobsen Ekspert
22. januar 2003 - 10:46 #17
Det er ikke noget problem... Er der mellemrum, linieskift eller lignende?
Jeg prøver lige at lave en hurtigt løsning til dig i PHP, som du kan teste
Avatar billede erikjacobsen Ekspert
22. januar 2003 - 10:54 #18
$t="<b>...<i>..</i>...</b>  <p><em> \n<font ...>\n\n";
$s = preg_replace('/(<[a-z0-9]+[^>]*>\s*)+$/i','',$t);
print $s."\n";
Avatar billede vis399cll Nybegynder
22. januar 2003 - 10:57 #19
Jeg er ikke helt sikker på hvor du spørg om der skal være linjeskift mm.
Mellemrum og linjesift findes der ikke efter koderne, men kan forekomme før og imellem.

Et præcist kode eksempel ser sådan her ud:
___________________________________________

<P>Bla bla bal. </P>

<P>Bla bla bal bla. </P>
<A name=page_8></A>
<UL>
<LI><EM>
        <LI>
________________________________________________
Avatar billede erikjacobsen Ekspert
22. januar 2003 - 11:00 #20
Ok - godt nok. Det tror jeg så jeg har taget højde for. Om du kan omskrive
det til ASP regulære udtryk ved jeg så ikke. Jeg vil dog sige at jeg ikke
vil spilde min ungdom på det :)
Avatar billede vis399cll Nybegynder
22. januar 2003 - 11:02 #21
Arrg jeg kunne bruge en forklaring her:
(<[a-z0-9]+[^>]*>\s*)+$/i

Altså finde forekomster hvor der er <bokstaver og tal og noget>mellemrum/spacers +$/i (her hopper jeg af, ahvad betyder det sidste?)
Avatar billede vis399cll Nybegynder
22. januar 2003 - 11:04 #22
Ahh end og input = $ men hvad med /i ?
Avatar billede websmith Nybegynder
22. januar 2003 - 11:07 #23
Hmm. En løsning kunne jo være:

Søg efter <
Find navnet på taggen fx I
Søg efter </I>
Hvis den ikke finder en, så skal taggen fjernes
hvis den finder en, og der er en <I> forinden, så skal den søge videre indtil den finder endnu en, som ikke har en matchende <I>.

Det skulle ikke være så svært at lave med et loop, men sikkert langsomt at køre :)

Men Regexp, det vil da være smart, men jeg tror det ikke
Avatar billede websmith Nybegynder
22. januar 2003 - 11:14 #24
Jeg tror man er nødt til at lave noget ovenstående, for man er jo nødt til at vide om der er en matchende </I> bare placeret forkert, og hvis den er placeret forkert, så skal man jo tage stilling til om man vil slette den, eller flytte den på plads, hvis man kan gætte hvor den skal være.
Avatar billede erikjacobsen Ekspert
22. januar 2003 - 11:38 #25
/.../i er blot "ignore case"
Avatar billede vis399cll Nybegynder
22. januar 2003 - 12:08 #26
Det er også rigtigt! Jeg har da også lavet reg.ex i java.script det burde jeg jo vide, nå men lad os se om det virker!
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