Java Regex Ergebnis ohne Suchmuster

mfuesslin

Ensign
Registriert
Juni 2007
Beiträge
149
Hallo!

Ich brauche mal eure Hilfe:
Folgendes Regex wende ich an:
Code:
"<param name=\\\\\"flashvars\\\\\" value=\\\\\"(.*?)\\\\\""

Schon alleine die bescheuerten ESCAPE-Sequenzen finde ich ja total nervig...

Hier der Java-Code:
Code:
Pattern pat = Pattern.compile("<param name=\\\\\"flashvars\\\\\" value=\\\\\"(.*?)\\\\\"");
Matcher m = pat.matcher(subject);
if (m.find()) {
	String subStr = subject.substring(m.start(), m.end());
	System.out.println(subStr);
	return subStr;
}

Mein Problem ist nun, dass als Ergebnis (subStr) nur das zwischen den runden Klammern haben will (also ohne <param name=\\\\\"flashvars\\\\\" value=\\\\\" davor).

In PHP ist das zum Beispiel bei preg_match so:
preg_match(PATTERN, SUBJECT, ARRAY_ZUM_SPEICHERN);

ARRAY_ZUM_SPEICHERN[0] enthält das Ergebnis inkl. Suchmuster
ARRAY_ZUM_SPEICHERN[1] enthält nur die Zeichenkette zwischen den zwei runden Klammern (das was ich in JAVA haben will)

Hoffe es ist klar was ich meine!

Vielen Dank
mfuesslin
 
Dann machs doch so wie php und schneid mit den replace Methoden das raus, was du nicht brauchst...
 
Limit schrieb:
Code:
m.group(1)
sollte das sein, was du suchst.
Hast du seinen Beitrag gelesen?

mfuesslin schrieb:
Schon alleine die bescheuerten ESCAPE-Sequenzen finde ich ja total nervig...
Jo, find ich auch. Besonders, weil sie unnötig ist. Warum so kompliziert?
Code:
String subject = "<param name=\"flashvars\" value=\"myValue1\"> ... <param name=\"flashvars\" value=\"myValue2\">";
Matcher m = Pattern.compile("<param name=\"flashvars\" value=\"(.*?)\"").matcher(subject);
while (m.find()) {
	System.out.println("Value: " + m.group().substring(31, m.group().length() - 1));
}
 
Code:
String subject = "<param name=\\\"flashvars\\\" value=\\\"myValue1\\\"> ... <param name=\\\"flashvars\\\" value=\\\"myValue2\\\">";
Pattern pat = Pattern.compile("<param name=\\\\\"flashvars\\\\\" value=\\\\\"(.*?)\\\\\"");
Matcher m = pat.matcher(subject);
if (m.find()) {
	String subStr = m.group(1);
	System.out.println(subStr);
	return subStr;
}

Der Code ergibt bei mir gerade den gesuchten String, nämlich "myValue1".

Wenn ich dein Pattern benutze (das matcht nicht das gleiche wie bei mfuesslin), wäre der Code wie folgt:

Code:
String subject = "<param name=\"flashvars\" value=\"myValue1\"> ... <param name=\"flashvars\" value=\"myValue2\">";
Matcher m = Pattern.compile("<param name=\"flashvars\" value=\"(.*?)\"").matcher(subject);
while (m.find()) {
	System.out.println("Value: " + m.group(1));
}

Ausgabe ist dann:
Code:
Value: myValue1
Value: myValue2
 
Muss mich entschuldigen, habe aus purer Gewohnheit eine 0 anstatt der 1 geschrieben, was das gesammte Match zurückgibt. Nichts für ungut...
 
regextester.com oben auf Ereg umstellen, dann hast du Java. Bin aber schon oft voll angestanden mit dem grottigen Java-EREG-RegEx-Kuddelmuddel, ist echt zum Mäuse melken. POSIX ist das einzig wahre. ;)
 
Zurück
Oben