Reguläre Ausdrücke

Kayuke

Mitglied
Guten Tag, ich möchte aus einem String "[Copter1:x=25|y=350][Copter2:x=25|y=233]" die Werte 25,350,26,233 erhalten. Könnte mir einer behilflich sein beim Pattern?

Escapen tue ich mit \\ wenn ich es richtig verstehe, und die Zahlen ersetze ich durch (\\d+) aber dennoch schmeißt er mir die ganze Zeit ne Exception. Ich wollte mit dem Tool RegExBuddy es versuchen, aber wenn ich das auf Java einstelle dann findet er dort Sachen die er wenn ich es in Java selbst probiere nicht findet :/

z.B. in RegExBuddy soll ich nur mit einem \ Escapen, weiß jemand woran das liegt?
 
Zuletzt bearbeitet:
also spontan geraten würde mir folgendes pattern einfallen

"x=(\\d+)|y=(\\d+).+x=(\\d+)|y=(\\d+)"

einfallen ... falls das so hinhaut solltest du dann mit group(1) - group(4) an die werte kommen ...
group(0) ist der gesamte passende string ...
 
Klappt leider nicht, hier zum selber Testen:

Java:
import java.util.regex.Matcher;
import java.util.regex.Pattern;


public class regex {
	  static final String regex = "x=(\\d+)|y=(\\d+).+x=(\\d+)|y=(\\d+)";
	  static final Pattern pattern = Pattern.compile(regex);
	 
	public static void main(String[] args) {
	    String eingabe = "[Copter1:x=25|y=350][Copter2:x=25|y=233]";
	 
	    Matcher matcher = pattern.matcher(eingabe);
	    
	    matcher.matches();
	 
	    System.out.println(matcher.group(0));
	}

}
 
hab eben noch mal nachgelesen ... "|" wird als OR erkannt > mask

"x=(\\d+)\\|y=(\\d+).+x=(\\d+)\\|y=(\\d+)"

und über "=" find ich nichts ... sollte so also funzen ...


bin kein regex profi ... aber das hier hilft : [japi]Pattern[/japi]
 
ich würde da eine Mischung aus Regex und einfachem Replace wählen, das ist besser lesbar...
Java:
        String s= "[Copter1:x=25|y=350][Copter2:x=25|y=233]";
        s = s.replace("|", ",");
        s = s.replace("][", ",");
        s = s.replaceAll("[^\\d,]","");
        System.out.println(s);
 
z.B. in RegExBuddy soll ich nur mit einem \ Escapen, weiß jemand woran das liegt?
In einer regular expression wird immer mit einfachem "\" escaped. Ein einfaches "\" hat in Java String Literalen eine Sonderbedeutung. Damit dieses als literal interpretiert wird und nicht als Sonderzeichen, muss es darum seinerseits escapaped werden, deswegen "\\" in Java-Strings.
 
Deinen Code angepasst:
Java:
static final String regex = "x=(\\d+)\\|y=(\\d+).+x=(\\d+)\\|y=(\\d+)";
static final Pattern pattern = Pattern.compile(regex);

public static void main(final String[] args) {
    String eingabe = "[Copter1:x=25|y=350][Copter2:x=25|y=233]";

    Matcher matcher = pattern.matcher(eingabe);

    if (matcher.find()) {
        System.out.println(matcher.group(1));
        System.out.println(matcher.group(2));
        System.out.println(matcher.group(3));
        System.out.println(matcher.group(4));
    }
}
 

Zurück
Oben