# Problem mit einer RegEx



## m@nu (26. Mrz 2007)

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

regex:

```
#include <(.*?)\\.idl>
```

input:

```
#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:

```
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


----------



## SlaterB (26. Mrz 2007)

was für ein begnadet dämlicher Test, sorry 

so gehts: 

```
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


----------



## m@nu (26. Mrz 2007)

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>


----------



## SlaterB (26. Mrz 2007)

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:


```
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));
        }


----------



## m@nu (26. Mrz 2007)

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!


----------

