Java 1.3 ORO Regex Problem

Dieses Thema: "Java 1.3 ORO Regex Problem" im Forum "Java/Mono/dotGNU" wurde erstellt von keks, 04.09.2009.

  1. keks

    keks nicht 1337 genug

    Dabei seit:
    17.01.2007
    Beiträge:
    401
    Zustimmungen:
    0
    Ort:
    Hessen
    Hallo Forum,

    ich habe eine software die Leider unter Java 1.3_10 laufen muss.
    Als regex "framework" nutzte ich jakarta ORO.

    Mein Problem ist, ich bekomme es nicht hin ORO zu überreden auf einen String ala "01.12.2009" zu matchen...
    ein regex von "([0-9]{1,2})" matcht ohne Probleme auf "09" (also das letzte vorkommen 2er Zahlen).
    Ich glaube mir raucht der Schädel zu sehr um das alleine zu lösen :headup:

    Code:
    import java.util.Date;
    import java.util.GregorianCalendar;
    
    import org.apache.oro.text.regex.*;
    
    public class RegexTester {
    
    	/**
    	 * @param args
    	 */
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    
    		Date date = new Date();
    		int groups = 0;
    		PatternMatcher matcher;
    		PatternCompiler compiler;
    		Pattern pattern = null;
    		PatternMatcherInput input;
    		MatchResult result;
    
    		compiler = new Perl5Compiler();
    	    matcher  = new Perl5Matcher();
    		
    	    String strDate = "01.02.2009";
    		
    		/* eg 12.01.2009 or 1.2.09 */
    		//String strPatrn = "([0-9]{1,2})\\.([0-9]{1,2})\\.([0-9]{4})";
    	    //String strPatrn = "([0-9]{1,2}).([0-9]{1,2}).([0-9]{2,4})";
    	    String strPatrn = "([0-9]{1,2}).+([0-9]{1,2})";
    		try {
    			pattern = compiler.compile(strPatrn);
    		} catch (MalformedPatternException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    
    		input   = new PatternMatcherInput(strDate);
    		
    		System.out.println("Using str: " + strDate);
    		System.out.println("Using pattern: " + strPatrn);
    		
    		while(matcher.contains(input, pattern)) {
    			result = matcher.getMatch();  
    			groups = result.groups();
    			
    //			date = new Date(
    //					Integer.parseInt(result.group(0)),
    //					Integer.parseInt(result.group(1)),
    //					Integer.parseInt(result.group(2))		
    //			   	   );
    			System.out.println(result.group(0));
    			System.out.println(result.group(1));
    			System.out.println(result.group(2));
    		}
    	}
    
    }

    Liebe Grüße

    Keks
     
  2. keks

    keks nicht 1337 genug

    Dabei seit:
    17.01.2007
    Beiträge:
    401
    Zustimmungen:
    0
    Ort:
    Hessen
    So ich habe es mir selbst (gemacht:devil:) gelößt!

    Code:
    import java.util.Date;
    
    import org.apache.oro.text.regex.*;
    
    public class RegexTester {
    
    	/**
    	 * @param args
    	 */
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    
    		Date date = new Date();
    		int groups = 0;
    		PatternMatcher matcher;
    		PatternCompiler compiler;
    		Pattern pattern = null;
    		PatternMatcherInput input;
    		MatchResult result;
    
                compiler = new Perl5Compiler();
    	    matcher  = new Perl5Matcher();
    		
    	    String strDate = "07.09.2009";
    		
    		/* eg 12.01.2009 or 1.2.09 */
    	      //String strPatrn = "([0-9]{1,2})\\.([0-9]{1,2})\\.([0-9]{4})";
    	      //String strPatrn = "([0-9]{1,2}).([0-9]{1,2}).([0-9]{2,4})";
    	        String strPatrn = "([0-9]{1,2})\\.([0-9]{1,2})\\.([0-9]{2,4})";
    		try {
    			pattern = compiler.compile(strPatrn);
    		} catch (MalformedPatternException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    
    		input   = new PatternMatcherInput(strDate);
    		
    		System.out.println("Using str: " + strDate);
    		System.out.println("Using pattern: " + strPatrn);
    		
    		while(matcher.contains(input, pattern)) {
    			result = matcher.getMatch();  
    			groups = result.groups();
    			
    
    			date = new Date(
    					Integer.parseInt(result.group(3))-1900, // Year - 1900
    					Integer.parseInt(result.group(2))-1, // Month 0-11 -> also decrement by 1!
    					Integer.parseInt(result.group(1))	 // Day of Month 1-31	
    			   	   );
    			System.out.println("result.group(0): " + result.group(0));
    			System.out.println("result.group(1): " + result.group(1));
    			System.out.println("result.group(2): " + result.group(2));
    			System.out.println("result.group(3): " + result.group(3));
    		}
    		System.out.println("New generated Date: \"" + date.toString()+ "\"");
    	}
    
    }
    Ausgabe ist:

    Code:
    Using str: 07.09.2009
    Using pattern: ([0-9]{1,2})\.([0-9]{1,2})\.([0-9]{2,4})
    result.group(0): 07.09.2009
    result.group(1): 07
    result.group(2): 09
    result.group(3): 2009
    New generated Date: "Mon Sep 07 00:00:00 CEST 2009"
    Erkenntnis: group0 ist das ganze gespeicherte Ergebniss... UUUND ordentlich Lesen
    Grüße
    Keks!
     
Thema:

Java 1.3 ORO Regex Problem

Die Seite wird geladen...

Java 1.3 ORO Regex Problem - Ähnliche Themen

  1. Java-Anwendungsserver: WildFly 10 freigegeben

    Java-Anwendungsserver: WildFly 10 freigegeben: Der Java-Anwendungsserver WildFly ist in Version 10 erschienen. Die neue Version ist nur noch für Java 8 und 9 ausgelegt und kann unter anderem...
  2. Java Plug-in geht in Rente

    Java Plug-in geht in Rente: Oracle hat angekündigt, mit der Auslieferung von Java 9, das frühestens im Frühjahr 2017 erscheinen soll, das Java-Browser-Plug-in als veraltet zu...
  3. Quellcode der JavaScript-Engine Chakra freigegeben

    Quellcode der JavaScript-Engine Chakra freigegeben: Microsoft hat die Kernkomponenten der JavaScript-Engine Chakra wie angekündigt freigegeben. Unterstützung für Linux ist eines der vordringlichsten...
  4. Zeitplan für Java 9 bestätigt

    Zeitplan für Java 9 bestätigt: Oracle hat in einer offiziellen Mitteilung bestätigt, dass Java 9 am 23. März 2017 und damit ein halbes Jahr später als bisher geplant erscheinen...
  5. Oracle muss wegen Java zu Kreuze kriechen

    Oracle muss wegen Java zu Kreuze kriechen: Der amerikanische Softwarehersteller Oracle einigete sich mit der US-Handelsbehörde FTC darauf, dass sich das Unternehmen öffentlich der...