[Perl] transliteration

Pagina: 1
Acties:

  • Kapoen
  • Registratie: Mei 2002
  • Laatst online: 22:10
Ik ben bezig aan een eenvoudig webbrowsertje onder perl
dat html documentjes binnen haalt en de HTML tags hiervan
verwijderd. Daarvoor gebruik ik volgende code:

code:
1
$lijn =~ tr/<BODY>/ /d;


Met deze regel poog ik dus de <BODY> tag te verwijderen.
Het probleem echter is dat perl elk karakter uit die <BODY>
string vergelijkt met mijn document en dus ook gewoon
letters verwijderd die er in staan (zijnde b,o,d en y).

Hoe kan ik deze transliteration functie 'wijsmaken' dat die
<BODY> als een geheel moet terugvinden?

Clowns to the left of me, Jokers to the right


Verwijderd

$lijn=~s/<body>//g;

  • Kapoen
  • Registratie: Mei 2002
  • Laatst online: 22:10
Mja, de s/// instructie had ik al overwogen om te gebruiken.

Nuja, als s/// echt de geknipte instructie is om volledige strings
weg te knippen zal ik deze zeker gebruiken.

Maar is het echt niet mogelijk met die transliteration?
(gewoon vraagje uit nieuwsgierigheid :) )

Alvast bedankt voor de tip

Clowns to the left of me, Jokers to the right


Verwijderd

tr/SEARCHLIST/REPLACEMENTLIST/cds

Strictly speaking, this operator doesn't belong in a section on pattern matching because it doesn't use regular expressions. Rather, it scans a string character by character, and replaces all occurrences of the characters found in the SEARCHLIST with the corresponding character in the REPLACEMENTLIST.

  • Kapoen
  • Registratie: Mei 2002
  • Laatst online: 22:10
Inderdaad, heb die documentie net nog eens doorgenomen
en heb hetzelfde gelezen.

Ik heb het probleempje dan maar met s/// opgelost zoals je
al reeds voorstelde in je eerste reply :)

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
  $inhoud = verwijderHTML($inhoud,"<HTML>","</HTML>");
  $inhoud = verwijderHTML($inhoud,"<HEAD>","</HEAD>");
  $inhoud = verwijderHTML($inhoud,"<TITLE>","</TITLE>");
  $inhoud = verwijderHTML($inhoud,"<BODY>","</BODY>");
  $inhoud = verwijderHTML($inhoud,"<BR>","<P>");
  $inhoud = verwijderHTML($inhoud,"<TABLE>","</TABLE>");
  $inhoud = verwijderHTML($inhoud,"<TD>","</TD>");
  $inhoud = verwijderHTML($inhoud,"<TR>","</TR>");
  print $inhoud;
  ...
  
  sub verwijderHTML() {
 
 ($lijn,$opentag,$sluittag) = @_;
 
 $lijn=~s/$opentag//g;
 $lijn=~s/$sluittag//g;
 
 $lijn=~s/lc($opentag)//g;
 $lijn=~s/lc($sluittag)//g;
 
 return $lijn;
}


bedankt voor de hulp :) _/-\o_

Clowns to the left of me, Jokers to the right


Verwijderd

even deze modifier toevoegen:
i Do case-insensitive pattern matching.
dus
$lijn=~s/$opentag//gi;

scheelt weer 2 regels.

  • Orphix
  • Registratie: Februari 2000
  • Niet online
Trouwens als je effectie alle HTML tags wil verwijderen dan zijn hier wel beter oplossingen voor door middel van regular expressions. Mocht je alleen specifiek deze tags eruit willen filteren dan kan je deze alsnog met 1 regexp doen:

s/(<TABLE>|<TR>|</TR>|<TD>|</TD>|</TABLE>)//ig

  • Red Sonja
  • Registratie: Juli 2001
  • Laatst online: 01-07 13:16

Red Sonja

Linux: power to de wortel

Orphix: geef dan een goed voorbeeld, als in de pattern een `/' voorkomt dan mag je die niet gebruiken als delimiters ;)


bash-2.05a$ perl -c -e 's/(<TABLE>|<TR>|</TR>|<TD>|</TD>|</TABLE>)//gi'
/(<TABLE>|<TR>|</: unmatched () in regexp at -e line 1.
bash-2.05a$ perl -c -e 's!(<TABLE>|<TR>|</TR>|<TD>|</TD>|</TABLE>)!!gi'
-e syntax OK
bash-2.05a$

And the beast shall be made legion. Its numbers shall be increased a thousand thousand fold. The din of a million keyboards like unto a great storm shall cover the earth, and the followers of Mammon shall tremble. from The Book of Mozilla, 3:31


  • Grum
  • Registratie: Juni 2001
  • Niet online
RedSonja schreef op 03 november 2002 @ 16:04:
Orphix: geef dan een goed voorbeeld, als in de pattern een `/' voorkomt dan mag je die niet gebruiken als delimiters ;)
Mag wel .. maar dan behoor je ze te escapen (als je wil dat het werkt).

Orphix: doe het dan zo:

Perl:
1
s!</?T(ABLE|R|D)>!!ig;


scheelt het je nog tekens ook ;)

  • Orphix
  • Registratie: Februari 2000
  • Niet online
hmmz ehja je moest het natuurlijk zien als een snel opzetje eh O-)
Pagina: 1