[CS] Regular expressions and sed

Forum van 1ste Bachelor Informatica.

Moderator: Praesidium

User avatar
Flipper
Posts: 193

[CS] Regular expressions and sed

Post#1 » Sun Oct 21, 2012 12:15 pm

Hier ben ik weer met een vraagje :?:

Voor de praktijk systemen moeten we een reeks regular expressions en seds vinden, voor alle opdrachten heb ik wel een expressie gevonden, alleen zit ik nu vast met de laatste oefening. Daar vragen ze om een sed command te vinden die HTML tags uitvoert. Dus voor dit:

Code: Select all

<h1>This is a valid HTML tag</h1>.
<i>These</b> <1>invalid</i> <a}>tags</a}> should be ignored.
Moet ik dit krijgen:

Code: Select all

This is a valid HTML tag.
<i>These</b> <1>invalid</i> <a}>tags</a}> should be ignored.
Ik gebruikte hiervoor de volgende command:

Code: Select all

sed "s|<[\/]\{0,1\}[a-zA-Z0-9]*>||g" < test.txt
Maar in plaats van de gewenste resultaten te krijgen, krijg ik als output dit:

Code: Select all

This is a valid HTML tag.
These invalid <a}>tags</a}> should be ignored.
Met de eerste lijn is er niks aan de hand, de HTML-tags worden echt wel weggehaald, maar met de tweede lijn zou de command er niets mee mogen doen omdat de tags daar niet juist staan.

Iemand een idee wat er met mijn code verkeerd is? :?
They call him Flipper, Flipper, faster than lightning,
No-one you see, is smarter than he,
And we know Flipper, lives in a world full of wonder,
Flying there-under, under the sea!

timvdm
Posts: 47

Re: [CS] Regular expressions and sed

Post#2 » Sun Oct 21, 2012 1:37 pm

Je moet overeenkomende tags matchen. Dus kan je iets doen zoals:

Code: Select all


s|<\(...\)>...</\1>|...|g
De ... moet je nog invullen maar met die \1 ga je enkel tags verwijderen die overeenkomen (bvb. <h1>...</h1> en niet <i>...</b>)

User avatar
Flipper
Posts: 193

Re: [CS] Regular expressions and sed

Post#3 » Sun Oct 21, 2012 5:56 pm

Ik krijg dan steeds een error met de melding: "ongeldige terugverwijzing"...
They call him Flipper, Flipper, faster than lightning,
No-one you see, is smarter than he,
And we know Flipper, lives in a world full of wonder,
Flying there-under, under the sea!

User avatar
djgl3nn
WOZ
Posts: 1938

Re: [CS] Regular expressions and sed

Post#4 » Sun Oct 21, 2012 6:04 pm

de terugverwijzing \1 wijst naar wat er onthouden is tussen de eerste haakjes ( )
gebruik wel ( ) ipv \( \)
(Indien je ze escaped zoekt hij naar de symbolen '(' & ')' ipv het te gebruiken voor een backreference )
WINAK Schacht 2009-2010
WINAK Sport 2010-2011
WINAK Mentor Informatica 2011-2012
WINAK Ouwe Zak 2012-...

UA Sportraad Webmaster 2012-...

timvdm
Posts: 47

Re: [CS] Regular expressions and sed

Post#5 » Sun Oct 21, 2012 6:23 pm

djgl3nn wrote:de terugverwijzing \1 wijst naar wat er onthouden is tussen de eerste haakjes ( )
gebruik wel ( ) ipv \( \)
(Indien je ze escaped zoekt hij naar de symbolen '(' & ')' ipv het te gebruiken voor een backreference )
De haakjes moeten wel degelijk geescaped worden. \( en \) zijn net zoals \< en \> of \{ en \}.

timvdm
Posts: 47

Re: [CS] Regular expressions and sed

Post#6 » Sun Oct 21, 2012 6:34 pm

Flipper wrote:Ik krijg dan steeds een error met de melding: "ongeldige terugverwijzing"...
Probeer systematisch je expressie op te bouwen. Je kan eerste de expressie maken die je gaat matchen mbv grep. Bij Ubuntu linux gaat grep bij default de match highlighten dus zo kan je alvast het eerste deel oplossen.

Bijvoorbeeld start met dit:

Code: Select all

grep '<\(.*\)>.*</\1>' test.txt
Dit werkt maar je moet er nog voor zorgen dat geen ongeldige tags matched (e.g. <a}>...</a}>) [eerste .*] en ook at je geen nested tages matched (e.g. <i>...</b> <1>...</i>) wat je met de niet ^ kan oplossen [tweede .*].

User avatar
djgl3nn
WOZ
Posts: 1938

Re: [CS] Regular expressions and sed

Post#7 » Sun Oct 21, 2012 7:09 pm

If so, what a strange syntrax.
WINAK Schacht 2009-2010
WINAK Sport 2010-2011
WINAK Mentor Informatica 2011-2012
WINAK Ouwe Zak 2012-...

UA Sportraad Webmaster 2012-...

User avatar
Flipper
Posts: 193

Re: [CS] Regular expressions and sed

Post#8 » Sun Oct 21, 2012 7:32 pm

HOER(a)! gevonden! :highfive:
djgl3nn wrote:If so, what a strange syntrax.
Klopt, ik heb het ook geprobeerd zonder te escapen, dat werkt niet blijkbaar en ik wordt helemaal knetter met die \>/)({}[]-tekens, ik zal maar stoppen voor vandaag..
They call him Flipper, Flipper, faster than lightning,
No-one you see, is smarter than he,
And we know Flipper, lives in a world full of wonder,
Flying there-under, under the sea!

Return to “1ste Bachelor”

Who is online

Users browsing this forum: No registered users and 7 guests

cron