PHP-RegEx in Java umschreiben

Hallo an alle!

Ich habe folgenden RegEx in PHP geschrieben:
http://regexp-evaluator.de/evaluator/bc4ca853ad1d26c…

Hier kann man den RegEx sehen und auch was als Resultat in PHP ankommt.

Diesen würde ich nun gerne in Java haben.

Soweit bin ich nun:
import java.util.regex.*;

public class Splitter {
public static void main(String[] args) throws Exception {
// Create a pattern to match breaks
//Pattern p = Pattern.compile("~^(?P\d+)(°)?\s+(?P\d+)’?\s+((?P\d+([,.]\d+)?)(’’)?\s+)?(?PN|S)\s+(?P\d+)(°)?\s+(?P\d+)’?\s+((?P\d+([,.]\d+)?)(’’)?\s+)?(?PE|W)$~im");

Pattern p = Pattern.compile("~^(?P\d+)(°)?\s+(?P\d+)\’?\s+((?P\d+([,.]\d+)?)(\’\’)?\s+)?(?PN|S)\s+(?P\d+)(°)?\s+(?P\d+)\’?\s+((?P\d+([,.]\d+)?)(\’\’)?\s+)?(?PE|W)$~im");

// Split input with the pattern

String[] result = p.split(„49° 30’ 47’’ N 120° 13’ 44’’ E“);
for (int i=0; i(Pattern.java:1124)
at java.util.regex.Pattern.compile(Pattern.java:817)
at Splitter.main(Splitter.java:7)

Leider scheint es auch nicht wie in PHP zu funktionieren, dass mir die Werte gleich in einem Array zur Verfügung stehen, oder?

Danke + Gruß PHANTOM

Hallo!

~^(?P\d+)(?)?\s+(?P\d+)’?\s+((?P\d+([,.]\d+)?)(’’)?\s+)?(?PN|S)\s+(?P\d+)(?)?\s+(?P\d+)’?\s+((?P\d+([,.]\d+)?)(’’)?\s+)?(?PE|W)$~im
^

Java kann mit „?P“ nichts anfangen. Das gehört ja offensichtlich zu den benamten Gruppen bei PHPs Regexps. Zudem ist das Escapen von ’ nicht nötig. Und die ° haben offensichtlich das Kopieren nicht überlebt.

Das sollte gehen:

String s = „^(\d+)°?\s+(\d+)\’?\s+(?:frowning:\d+(?:[,.]\d+)?)(?:’’)?\s+)?(N|S)“+
„\s+(\d+)°?\s+(\d+)\’?\s+(?:frowning:\d+(?:[,.]\d+)?)(?:’’)?\s+)?(E|W)$“;
Bei erfolgt liefert der Matcher mit group(1) bis group(8) die Inhalte, bei den Sekunden ggf. null.

th

Hallo.

Ich habe es nun folgendermaßen eingebaut:
import java.util.regex.*;

public class Splitter {
public static void main(String[] args) throws Exception {
Pattern p = Pattern.compile("^(\d+)°?\s+(\d+)\’?\s+(?:frowning:\d+(?:[,.]\d+)?)(?:’’)?\s+)?(N|S)"+ „\s+(\d+)°?\s+(\d+)\’?\s+(?:frowning:\d+(?:[,.]\d+)?)(?:’’)?\s+)?(E|W)$“);

// Create a matcher with an input string
Matcher m = p.matcher(„49° 30’ 47’’ N 120° 13’ 44’’ E“);

StringBuffer sb = new StringBuffer();
boolean result = m.find();
// Loop through and create a new String with the replacements
while(result) {
result = m.find();
}
// Add the last segment of input to the new String
m.appendTail(sb);
System.out.println(sb.toString());
}
}

Wie kriege ich aber nun die einzelnen Bestandteile? Denn ich will die einzelnen Teile so haben, wie auch unter PHP.

Als Resultat liefert mir die Konsole nämlich nur den ganzen String:
49? 30’ 47’’ N 120? 13’ 44’’ E
Wobei das ° durch ein ? dargestellt wird.

Danke + Gruß PHANTOM

Wie kriege ich aber nun die einzelnen Bestandteile? Denn ich
will die einzelnen Teile so haben, wie auch unter PHP.

Als Resultat liefert mir die Konsole nämlich nur den ganzen
String:
49? 30’ 47’’ N 120? 13’ 44’’ E

Die einzelnen Gruppen sind über m.getGroup(index) zu erreichen:

 // Create a matcher with an input string
 Matcher m = p.matcher("49° 30\' 47\'\' N 120° 13\' 44\'\' E");
 if(m.matches())
 {
 for(int i=0; i
Der gesamte gematchte Bereich stehtn in group(0), die Untergruppen in group(1) - group(7).


> Wobei das ° durch ein ? dargestellt wird.

Das wird nur in der DOS Konsole falsch dargestellt (genauso wie Umlaute),


    
    javax.swing.JOptionPane.showMessageDialog(null, m.group(0));



stellt den String korrekt dar.

Gruß
Heavy