Problem mit einer RegEx

Status
Nicht offen für weitere Antworten.

m@nu

Bekanntes Mitglied
ich blicks nicht mehr...
warum matcht folgendes nicht??

regex:
Code:
#include <(.*?)\\.idl>

input:
Code:
#include <CS_B.idl>                         // CS - Allgemein (obligat)

im regexbuddy funktioniert alles tiptop... (einmal als ganzes und einmal die capturegroup vor der dateiendung)
...aber java findet, dass da nix gefunden werden kann ???:L

meine implementierung:
Code:
        BufferedReader in = new BufferedReader(new FileReader("RSIN_RiskEvent_1.idl"));
        
        String buffer;
        Pattern pattern = Pattern.compile("#include <(.*?)\\.idl>", Pattern.CANON_EQ);
        
        
        while((buffer = in.readLine()) != null) {
            buffer = buffer.trim();
            
            if(!buffer.startsWith("//")
                    && !buffer.startsWith("/*")
                    && !buffer.startsWith("*")) {
                
                Matcher matcher = pattern.matcher(buffer);
                
                if(matcher.matches())
                    System.out.println(matcher.group(0));
            }
        }

kann mir jemand erklären warum das so ist?

besten dank im voraus & grüsse
m@nu
 
was für ein begnadet dämlicher Test, sorry 😉

so gehts:
Code:
public class Test2
{
    public static void main(String[] args)
    {
        String test = "#include <CS_B.idl>";
        Pattern pattern = Pattern.compile("#include <(.*?)\\.idl>");
        Matcher matcher = pattern.matcher(test);


        if (matcher.matches())
        {
            System.out.println(matcher.group(0));
        }
    }
}
funktioniert, Rest hat anscheinend erstmal nix mit RegEx zu tun sondern z.B. mit datei-Lesen 😉

edit:
oder doch:
mit jedem Zeichen mehr klappt es nicht mehr,
Matcher prüft immer, ob der gesamte String passt
 
hehe, gar nix dämlicher test!
bin für uns hier im büro ein tool am schreiben, welches das editieren von CORBA-vorlagestrukturen (IDL's) erleichtern soll.
und da brauchts eben nen parser, der auch schon fertige files lesen kann.
(darum sind auch noch comments usw. per startsWidth kodiert usw. ... is alles noch in entwicklung)


hm, das heisst ich muss entweder den regex anpassen oder gibts da ne option die ich zuschalten kann für den matcher?

<edit>
hab jetzt mal noch nen .*? am schluss rangehängt... klappt jetzt auch mit dem Matcher... aber irgendwie nur ne halbpatzige lösung, nicht?
</edit>
 
da ist die Frage, was du überhaupt tun willst,

suchst du nur einen Teil oder willst du den ganzen String matchen, was du im Moment machst
(Java macht das was du schreibst, nicht das was du willst)

ein paar Matcher-Operationen:

Code:
 boolean find() 
          Attempts to find the next subsequence of the input sequence that matches the pattern. 


 boolean matches() 
          Attempts to match the entire input sequence against the pattern.
bei group ist zwar dummerweise von 'previous match' die Rede, geht aber auch mit find:

if (matcher.find())
{
System.out.println(matcher.group(0));
}
 
aha! super! vielen dank für die info!
brauch die regex unter java mehr oder weniger zum ersten mal. denke, auch ich sollte die API's ein wenig besser lesen, wenns um ein neues thema geht 😉

nochmals thx & nen schönen abend! 🙂
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben