regulärer ausdruck für anfänger

nathan26

Grünschnabel
bestimmt kann mir jemand bei diesem problem schnell helfen. es geht um folgendes. ich erstelle eine liste mit für mich wichtigen adressen. ich habe eine seite im web gefunden die guten content erhält und den ich in einer datenbank ablegen möchte. so ...

mit regulären ausdrücken bin ich nicht sonderlich bewandert aber für diese arbeit sind sie am geeignetsten.

<div class="adr"> ich will alles zwischen den divs </div>

<div class="adr"><span> ich will alles zwischen den divs </span></div>

jetzt habe ich das problem, dass manchmal ein "<span>" am anfang steht. wie kann ich diesen quelltextfetzen ausschliessen? bei mir will es einfach nicht richtig hinhauen. ich hab schon einige seiten in tutorials durchgeblättert aber noch nicht das gefunden wonach ich suche.

gruss,
nathan
 
Wenn Du mit Perl programmierst, würde ich Dir eher das Modul Web::Scraper empfehlen. Dann brauchst Du Dir keine Gedanken mehr wegen RegEx machen.

Wenn Du es unbedingt mit RegEx machen willst, dann probier mal
Code:
my $content = '<div class="adr"><span> ich will alles zwischen den divs </span></div>';
my @text = $content =~ m!<div>(?:<span)?(.*?)(?:</span>)?</div>!g;
 
ich hab es mir gerade angesehen und ja, genau so wollte ich es haben. ich werde mir die regex noch genau ansehen damit ich sie auch versteh. auf jeden fall sag ich dir mal ein herzliches danke. hast mir echt geholfen!!
 
jetzt hab ich doch noch etwas und zwar.

<div class="adr">(?:<span>)?(.*?)(?:</span>)?</div>

das was zwischen den divs steht ist durch 2 beistriche geteilt.

<div class="adr">(?:<span>) contenttext , textcontent , contenttext (?:</span>)?</div>

alles nach dem zweiten beistrich, auch der beistrich selbst, gehört weg.

kannst du mir sagen was ich falsch mache? die beistriche kommen nur vor wenn auch <span> vorkommt. er schneidet es mir immer schon beim ersten beistrich ab.

<div class="adr">(?:<span>)?(.*?(?:,)?.*?)(?:,.*?</span>)?</div>
 
mit deiner regex ist es nun folgendermassen. ich erhalte jetzt das erste ergebnis aus dem quelltext korrekt, dafür werden die weiteren, auf die der ausdruck auch zutreffen sollte, nicht mehr angezeigt.

jetzt:
1 text , text

vorher:
1 text , text, text
2
3 text , text, text
4 text , text, text
5
6
7 text , text, text
8
 
Zuletzt bearbeitet:
Hallo,

der Thread ist zwar schon etwas älter, aber ich häng mich hier mal mit rein.
Ich versuche auch gerade etwas mit Perl zu scripten und bin leider blutiger Anfänger.

Ich benutze für mein Miniscript das Modul Web::Scraper, welches renee auch für die eigentliche Anfrage des Threaderstellers empfiehlt.

Das Script:

Code:
#!/usr/bin/perl
use strict;
use warnings;
use Web::Scraper;
use URI;
 
my $s = scraper {
	process ".weather", daten => 'TEXT';
	result 'daten';
 
};
my $uri = URI->new("http://kli.uni-muenster.de/de/weather/index.html");
print $s->scrape($uri);

HTML Tabelle der aufgerufenen Site:

Code:
<table class="weather"> 
		<tr class="head">
		<td colspan="3">
			Letzte Messwerte
		</td>

	</tr>
	<tr class="even">
		<td>Messzeit</td>
		<td>(MESZ)</td>
		<td class="data">
			08.04.2008 17:20		</td>
	</tr>

	<tr class="odd">
		<td>Lufttemperatur</td>
		<td>(2 m &uuml;Grund)</td>
		<td class="data">
			7,7&nbsp;&deg;C
		</td>
	</tr>

	<tr class="even">
		<td>Relative Luftfeuchte</td>
		<td>(2 m &uuml;Grund)</td>
		<td class="data">
			51,6&nbsp;%
		</td>
	</tr>

	<tr class="odd">
		<td>Luftdruck</td>
		<td>(76 m &uuml;NN)</td>
		<td class="data">
			996,0&nbsp;hPa
		</td>
	</tr>

	<tr class="even">
		<td>Windgeschwindigkeit</td>
		<td>(4,4 m &uuml;Grund)</td>
		<td class="data">
			2,3&nbsp;m/s<br />
			8,4&nbsp;km/h<br />

	</tr>
	<tr class="even">
		<td colspan="2">&nbsp;&nbsp;entspricht Windst&auml;rke</td>
		<td class="data">
			 Beaufort&nbsp;2		</td>
	</tr>
	<tr class="odd">

		<td>maximale Windb&ouml;e</td>
		<td>(letzte 10 min)</td>
		<td class="data">
			4,5&nbsp;m/s
		</td>
	</tr>
	<tr class="even">

		<td>Windrichtung</td>
		<td>(4,4 m &uuml;Grund)</td>
		<td class="data">
			82&deg;<br />
			(aus O)
		</td>
	</tr>

	<tr class="odd">
		<td>Kurzwellige Einstrahlung</td>
		<td></td>
		<td class="data">
			168,3&nbsp;W/m²
		</td>
	</tr>

	<tr class="even">
		<td>Sichtweite</td>
		<td></td>
		<td class="data">
			&gt;2000&nbsp;m
		</td>
	</tr>
	<tr class="odd">

		<td>Wettercode</td>
		<td>(WMO 4680)</td>
		<td class="data">
			0		</td>
	</tr>
	<tr class="odd">
		<td>&nbsp;&nbsp;Beschreibung</td>

		<td></td>
		<td class="data">
			trocken		</td>
	</tr>
</table>

Es liefert mir zumindest schon einmal den Text aus der entsprechenden HTML-Tabelle von der Website.
Jetzt möchte ich nur noch die Ausgabe filtern, da ich nicht alle Werte benötige.
Vielleicht kann mir mal jemand ein Beispiel geben, wenn ich z.B. die Windgeschwindigkeit mit dem entsprechenden Wert ausgeben möchte.

Gruß

Torsten
 
Zuletzt bearbeitet:
Zurück