Java Regex/Matcher Backreference

gamp

Mitglied
Hallo,

hab mir gerade mal Java Regex angesehn; hier mal ein ausschnitt vom Code:

Code:
private Pattern tune = Pattern.compile("(.*)<a href=\"/item/(.*).html\" title=\"Details von dem Titel anzeigen\">(.*)<br><font class=\"browseRowData\">aa: (.*)</font></a></td>(.*)");
(...)
//data könnte dann zB. so aussehen:
String data = "bajshdjka<a href=\"/item/18238192983aasd.html\" title=\"Details von dem Titel anzeigen\">This is title A<br><font class=\"browseRowData\">aa: And this is Title B</font></a></td>ajhskjshas weird stuff here";
(...)
if(tune.matcher(data).matches()) {
         String tune_a = $3;
         String tune_b = $4;
}

"data" ist mein String, über den ich den Pattern "tune" lege. Wenn der String den Pattern matched will ich zwei der Backreferences, also was "(.*)" im String beinhaltet hat, in zwei neuen Strings (tune_a und tune_b) speichern. So funktioniert das Ganze allerdings nicht. Wie greife ich nun auf die Backreferences zu? Oder funktioniert das nur innerhalb des Regex selbst? Im angegebenen "data" beispiel sollte tune_a dann den Wert "This is title A" und tune_b dann den wert "This is Title B" beinhalten.

Mfg
gamp00

EDIT:

Nevermind, I found the solution replacing my tune.matcher(data).group(3) by Mater m = tune.matcher(data) m.group(3), works perfectly.
m.group(int n) to grab the proper group.
 
Zuletzt bearbeitet:
Hallo,

schau mal hier:
Java:
package de.tutorials;

import java.util.Arrays;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Snippet {
	public static void main(String[] args) {
		String regex = "(.*)<a href=\"/item/(.*).html\" title=\"Details von dem Titel anzeigen\">(.*)<br><font class=\"browseRowData\">aa: (.*)</font></a></td>(.*)";
		String input = "bajshdjka<a href=\"/item/18238192983aasd.html\" title=\"Details von dem Titel anzeigen\">This is title A<br><font class=\"browseRowData\">aa: And this is Title B</font></a></td>ajhskjshas weird stuff here";

		//Mit Matcher
		Matcher matcher = Pattern.compile(regex).matcher(input);
		if (matcher.matches()) {
			
			for(int i = 1, count = matcher.groupCount();i < count;i++){
				System.out.println(matcher.group(i));
			}
			
		}
		
		System.out.println("######");
		
		//Mit String (manchmal ziemlich elegant für kleinere Regex)
		System.out.println(Arrays.toString(input.replaceAll(regex,"$1;$2;$3;$4").split(";")));

	}
}

Gruß Tom
 
Zurück