Java 1.3 ORO Regex Problem

Dieses Thema 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. Anzeige

    Schau dir mal diesen Ratgeber an. Viele Antworten inkl. passender Shell-Befehle!
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. 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. Werkstudent/ in als Mobile -Entwickler für Android (Java)

    Werkstudent/ in als Mobile -Entwickler für Android (Java): Werkstudent/ in als Mobile -Entwickler für Android (Java) Die DiOmega GmbH ist eine Agentur mit Sitz in Frankfurt am Main, die sich auf IT- und...
  2. Mobile -Entwickler für Android (Java) in Vollzeit (m/w)

    Mobile -Entwickler für Android (Java) in Vollzeit (m/w): Mobile -Entwickler für Android (Java) in Vollzeit (m/w) Die DiOmega GmbH ist eine Agentur mit Sitz in Frankfurt am Main, die sich auf IT- und...
  3. Java-Entwickler in Vollzeit (m/w)

    Java-Entwickler in Vollzeit (m/w): Java-Entwickler in Vollzeit (m/w) Die DiOmega GmbH ist eine Agentur mit Sitz in Frankfurt am Main, die sich auf IT- und Web-Dienstleistungen...
  4. iJUG: Sorge um JavaFX

    iJUG: Sorge um JavaFX: Für den iJUG mehren sich die Anzeichen, dass JavaFX keine große Zukunft mehr bei Oracle hat. So wurde die Unterstützung für die Version 8u33 von...
  5. 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...