|
|
||||||
|
#1
|
|
|
|
|
Mensen,
Ik wil wat tekst uit een stuk HTML code halen. Alle stukken tekst die niet tussen de zelfde tags staan wil ik apart houden in verschillende variabelen of in een array. Ik heb ook al even naar wat modules gekeken (o.a HTML:Parser en HTML::TreeBuilder) maar daarmee kreeg ik het ook niet voorelkaar. De HTML is nette HTML met een zeer beperkt aantal tags en een onbekend aantal stukken tekst. Ik zit een beetje in deze richting te denken: #!/usr/bin/perl use strict; use warnings; my $html = '<b><i>foo</i></b><p><b>bar</b></p>'; foreach ($html =~ />*.</g) { print "$1 \n"; #of stop $1 in een array } Weet iemand hoe die regex wel moet zijn? |
|
|
|
#2
|
|
|
|
|
On Thu, 04 Mar 2010 19:53:36 +0000, EeBie wrote:
> Weet iemand hoe die regex wel moet zijn? />(.*[^<].*)</g werkt vreemd genoeg ook niet. :-( |
|
#3
|
|
|
|
|
EeBie <eebieeebie>:
> Weet iemand hoe die regex wel moet zijn? Zoiets? my @text = $html =~ m/>([^<]+?)</g; |
|
#4
|
|
|
|
|
Once upon a newsgroup, EeBie claimed:
> On Thu, 04 Mar 2010 19:53:36 +0000, EeBie wrote: >> Weet iemand hoe die regex wel moet zijn? > />(.*[^<].*)</g werkt vreemd genoeg ook niet. :-( while ($html =~ />([^<]+)</g) { .. } dan? Ciao, Johan |
|
#5
|
|
|
|
|
On Thu, 04 Mar 2010 20:39:56 +0000, Johan van Selst wrote:
> Once upon a newsgroup, EeBie claimed: >> On Thu, 04 Mar 2010 19:53:36 +0000, EeBie wrote: >>> Weet iemand hoe die regex wel moet zijn? >> />(.*[^<].*)</g werkt vreemd genoeg ook niet. :-( > > while ($html =~ />([^<]+)</g) { .. } dan? Nee dan krijg: bar bar |
|
#6
|
|
|
|
|
On Thu, 04 Mar 2010 20:39:38 +0000, robert wrote:
> EeBie <eebieeebie>: >> Weet iemand hoe die regex wel moet zijn? > > Zoiets? > my @text = $html =~ m/>([^<]+?)</g; Ja als ik die array met linebreaks uitprint krijg ik: foo bar Dus dat lijkt goed! Bedankt! |
|
#7
|
|
|
|
|
On 03/04/2010 08:53 PM, EeBie wrote:
> Mensen, > > Ik wil wat tekst uit een stuk HTML code halen. lynx -dump -nolist |
|
#8
|
|
|
|
|
The wise robert enlightened me with:
> EeBie <eebieeebie>: >> Weet iemand hoe die regex wel moet zijn? > > Zoiets? > my @text = $html =~ m/>([^<]+?)</g; > is +? niet gelijk aan *, of mis ik dan een subtiele bijwerking? Mark |
|
#9
|
|
|
|
|
EeBie <eebieeebie> writes:
> Mensen, > > Ik wil wat tekst uit een stuk HTML code halen. Alle stukken tekst die > niet tussen de zelfde tags staan wil ik apart houden in verschillende > variabelen of in een array. Ik heb ook al even naar wat modules gekeken > (o.a HTML:Parser en HTML::TreeBuilder) maar daarmee kreeg ik het ook niet > voorelkaar. De HTML is nette HTML met een zeer beperkt aantal tags en een > onbekend aantal stukken tekst. Doe jezelf een enorm plezier en leer HTML::TreeBuilder te gebruiken voor je jezelf in je voet schiet met regexs. > my $html = '<b><i>foo</i></b><p><b>bar</b></p>'; --8<---------------cut here---------------start------------->8--- #!/usr/bin/perl use strict; use warnings; use HTML::TreeBuilder; my $html = '<b><i>foo</i></b><p><b>bar</b></p>'; my $tree = HTML::TreeBuilder->new_from_content( $html ); my @bold = $tree->look_down( _tag => 'b' ); print $_->as_trimmed_text(), "\n" for @bold; --8<---------------cut here---------------end--------------->8--- |
|
#10
|
|
|
|
|
Mark Huizer wrote:
> The wise robert enlightened me with: >> EeBie <eebieeebie>: >>> Weet iemand hoe die regex wel moet zijn? >> >> Zoiets? >> >> my @text = $html =~ m/>([^<]+?)</g; > > is +? niet gelijk aan *, of mis ik dan een subtiele bijwerking? Zie perldoc perlre, zoek op "greedy". "+?" doet liever 1 dan 2. Probeer ook eens: m/>(.+?)</g (niet 100% equivalent) en: m/>([^<]+)</g |
|
#11
|
|
|
|
|
Mark Huizer <xaa+news_nl.comp.os.linux.programmeren>:
> The wise robert enlightened me with: >> EeBie <eebieeebie>: >>> Weet iemand hoe die regex wel moet zijn? >> >> Zoiets? >> my @text = $html =~ m/>([^<]+?)</g; > > is +? niet gelijk aan *, of mis ik dan een subtiele bijwerking? De ? is hier niet nodig, maar '+?' is niet hetzelfde als '*' omdat die laatste ook de lege string matcht en de eerste niet. |
|
#12
|
|
|
|
|
Once upon a newsgroup, EeBie claimed:
> On Thu, 04 Mar 2010 20:39:56 +0000, Johan van Selst wrote: >>> my $html = '<b><i>foo</i></b><p><b>bar</b></p>'; >> while ($html =~ />([^<]+)</g) { .. } dan? > Nee dan krijg: > bar > bar Apart. Dan heb je toch een andere perl versie dan ik... Ciao, Johan |
|
#13
|
|
|
|
|
The wise robert enlightened me with:
> Mark Huizer <xaa+news_nl.comp.os.linux.programmeren>: >> The wise robert enlightened me with: >>> EeBie <eebieeebie>: >>>> Weet iemand hoe die regex wel moet zijn? >>> >>> Zoiets? >>> my @text = $html =~ m/>([^<]+?)</g; >> >> is +? niet gelijk aan *, of mis ik dan een subtiele bijwerking? > > De ? is hier niet nodig, maar '+?' is niet hetzelfde als '*' omdat die > laatste ook de lege string matcht en de eerste niet. Ah, ok, minimal matching, sorry, ik moet ook beter opletten als ik iets zeg. Mark |
|
#14
|
|
|
|
|
On Fri, 05 Mar 2010 06:45:01 +0000, Johan van Selst wrote:
> Apart. Dan heb je toch een andere perl versie dan ik... Excuses, het werk wel. Iets fout gedaan. |
|
#15
|
|
|
|
|
On Thu, 04 Mar 2010 17:12:14 -0600, John Bokma wrote:
> > Doe jezelf een enorm plezier en leer HTML::TreeBuilder te gebruiken voor > je jezelf in je voet schiet met regexs. Ik had er al naar gekeken maar ik kreeg mijn probleem er niet mee opgelost. Modules hebben altijd mijn voorkeur. > --8<---------------cut here---------------start------------->8--- > #!/usr/bin/perl > > use strict; > use warnings; > > use HTML::TreeBuilder; > > my $html = '<b><i>foo</i></b><p><b>bar</b></p>'; > > my $tree = HTML::TreeBuilder->new_from_content( $html ); > > my @bold = $tree->look_down( _tag => 'b' ); print $_->as_trimmed_text(), > "\n" > for @bold; > --8<---------------cut here---------------end--------------->8--- Voorbeeld verduidelijkt wel het een en ander maar ik weet niet door welke tags de tekst omsloten wordt. <b> Hoeft dus niet aanwezig te zijn. Voorbeeld was trouwens een simpele voorstelling van zaken waarschijnlijk is de module niet flexibel genoeg. Bedankt voor het meedenken. |
|
|
| Soortgelijke onderwerpen | |
| Regex vraagje Ik zoek in een stuk html naar een aantal regels die tussen <td> en </td> staan. Het gaat me om de regels die tussen BEGIN en EIND staan. De regex die 1 tdtje vindt is:... |
|
| perl regex lukt niet "2Rowdy" <Harry131313> writes: > Ik probeer iets.iets.iets te halen uit deze regel: > 12 45 iets.iets.iets > <newline> > Uiteindelijk ben ik... |
|
| perl regex vraag hi, uit een apache access.log wil ik het datum eruit prikken: 66.249.72.14 - - [05/Feb/2006:06:32:58 +0100] ^^^^^^^^^^^^^^^^^^^^ dit dus. dit probeer ik: |
|
| Perl vraagje Hallo, Ik ben bezig met een perlscriptje. Dit is (vereenvoudigd) wat ik al heb: #!/usr/bin/perl $ls = `ls`; print $ls -al; De bedoeling is om de uitvoer van ls -al naar... |
|
|
Alle tijden zijn in GMT. De tijd is nu 05:15. | Privacy Policy
|