Pattern / Matcher

PhilippGer

Mitglied
Hi.
Ich soll in einem Programm den Quelltext einer Website auf <img ...> Tags durchsuchen und dann Eigenschaften dieses Tags weiterverarbeiten.


Das herausfiltern der Tags mit Pattern und Matcher klappt soweit prima.

Ich erhallte dann Strings der Form:
Code:
<img src=\"google.de\" alt="nicht gefunden" width=\"100\" height=\"150\">

Diese möchte ich nun weiter untersuchen um die EIgenschaften einzeln zu FIltern.

Dabei lasse ich (für src) z.B. mit dem Pattern:
Code:
String p = "src=\"\\S*\"";
suchen.

Dadurch bekomme ich allerdings dann immer Suchergebnisse, die auch "src="" enthalten. Muss ich diese Zeichen nun einzeln abschneiden?

Ich denke mal es gibt eine elegantere Lösung, dass das Pattern zwar darauf achtet, dass diese Form beibehalten wird, im Resultat aber nur alles zwischen den Anführungszeichen steht.

Hier mal der Code einer Testumgebung:
Code:
import java.util.regex.Matcher;
import java.util.regex.Pattern;


public class Test {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		String a = "<img src=\"google.de\" width=\"100\" height=\"150\">";
		String p = "<img src=\"\\S*\" width=\"\\d*\" height=\"\\d*\">";
		
		Matcher matcher = Pattern.compile(p).matcher(a);
		
		boolean found = false;
		while(matcher.find()){
			String imgTag = matcher.group();
			System.out.println("Tag:");
			System.out.println("\t" + imgTag);
			System.out.println("\t" + srcPattern(imgTag) );
			found = true;
		}
		if( !found ){
			System.out.println("Sorry, nothing found");
		}
	}
	
	public static String srcPattern(String tag){
		String p = "src=\"\\S*\"";
		Matcher matcher = Pattern.compile(p).matcher(tag);
		if(matcher.find()){
			return matcher.group();
		}
		else{
			return "nothing found";
		}
	}

}
 
Du kannst Runde Klammer um den Teil benutzen den du extrahieren möchtest. Dann kannst du über matcher.group(int) auf die einzelnen Ergebnisse zugreifen.

Aber schau doch einfach in die Dokumentation von Pattern. Da steht das auch alles so drin.
 
Ich arbeite da immer gerne mit dem Regexp Applet von Apache:
http://jakarta.apache.org/regexp/applet.html

Als String habe ich dein Beispiel eingegeben <img src="google.de" alt="nicht gefunden" width="100" height="150"> als regexp src="([^"]+)"

Musst nur darauf achten, dass im Java Code mehr escaped werden muss. Aber das wirst Du merken :)

Gruß Sen
 
Hallo zusammen,

bei der Gelegenheit mal wieder kleiner Tipp am Rande in diesem Zusammenhang!

Wir nutzen hier in der Firma zum Testen von regulären Ausdrücken das nette kleine
Tool "RegEx coach"! Es kann zusammen mit seiner Doku hier runtergeladen werden:
http://weitz.de/regex-coach ("Windows installer" oder "Linux tar archive")

Es eignet sich auch gut zur Einarbeitung in dieses Thema!

Eine weitere gute Übersicht zu den Java Pattern liefert diese Seite:
http://java.sun.com/j2se/1.4.2/docs/api/java/util/regex/Pattern.html

Gruß
Klaus
 
Nette Tools :) Vielleicht könnt ihr das noch im Links-Thread bzw. in der Links-Sektion des Forums eintragen.
 
Moin zeja,

jau, hat mir schon mehrfach sehr geholfen ...

Aber ich hoffe, Du meinst mir mit "ihr" nicht mich, denn ich habe offen gestanden keinen blassen Schimmer, wo von Du sprichst .... :-(

Gruß
Klaus
 
Ah, ok,
auf der Link-Seite war ich noch nicht - Danke für den Tipp! ;-)

Habe meinen Post mal im von Dir angegebenen Hauptforum untergebracht ...

tschüss
Klaus
 

Neue Beiträge

Zurück