Avatar billede fizk Nybegynder
07. marts 2007 - 20:02 Der er 10 kommentarer og
1 løsning

Fejl i reg. exp.

Ja, jeg sidder og er ved at bikse noget sammen og har brug for at fjerne alt hvad der hedder
\begin{et eller andet}
og
\end{et eller andet}

hvilket jeg bruger en reg. exp. til, som ser således ud;
\\\\(begin|end)?{[\\w]+}

dog vil Java ikke acceptere dette og giver mig en PatternSyntaxError, selvom det er RegExp Buddy der har givet mig den streng (derfor ligger spm. her, da jeg tror problemet ligger i java delen).
Er der nogen af jer kloge hoveder der kan forklare mig hvad der går galt?

Lidt mere kode, i sammehæng:
reader = new BufferedReader(new FileReader(fileName));                   
try
{
    String line = "";
    while (line != null)
    {
        line = reader.readLine();
        if(line!=null)
        {
            stringTotal = stringTotal+line+"\n";
            try
            {
                line = line.replaceFirst("\\\\(begin|end)?{[\\w]+}","...");
                System.out.println(line);
            }
            catch(Exception E)
            {
                System.out.println("ERROR IN THE ABOVE: "+E);
            }
        }
    }
}
Avatar billede jakoba Nybegynder
07. marts 2007 - 23:50 #1
du har for mange \ tegn
? tegnet betyder at den også matcher hvis der hverken står 'begin' eller 'end'
Jeg har beholdt \w+ da det muligvis er med vilje du kræver der skal stå nogen word characters bagefter.
        line = line.replaceFirst("\\(begin|end)\w+","...");
Avatar billede jakoba Nybegynder
07. marts 2007 - 23:57 #2
Din syntaksfejl er nok fordi tuborger bør stå omkring det antal gange en forudstående patternenged må gentages. de må ikke stå omkring et pattern. (eg "a{2,6}" betyder mindst 2 og højest 6 'a'-er)
Avatar billede fizk Nybegynder
08. marts 2007 - 09:56 #3
Ja, jeg undrede mig også over at der skulle være så mange \, men det var Reg. Exp. Buddy selv der smed dem ind, så jeg tænkte de måtte være gode nok.
I lyset af din kommentar mht. tuborgklammerne, er jeg nu kommet videre og har løst problemet, der også viste sig at ligge et andet sted i koden (jeg sætte den samlede string, hvorefter jeg laver replace'n), så den samlede kode ser nu sådan ud;

try
{
    String line = "";
    while (line != null)
    {
        line = reader.readLine();
        if(line!=null)
        {
        // REG EXP BUDDY
            try {
                line = line.replaceAll("\\\\(begin|end|subsection)?\\{[\\w|\\s]*+\\}", "");
            } catch (PatternSyntaxException ex) {
                System.out.println("Syn. erre:" + ex);
            } catch (IllegalArgumentException ex) {
                System.out.println("Arg. ex.:" +ex);
            } catch (IndexOutOfBoundsException ex) {
                System.out.println("Back ref:"+ex);
            }
        // /REG EXP BUDDY
        stringTotal = stringTotal+line+"\n";
        }
       
       
    }
    myFirstArea.setText(stringTotal);
}


så hvis du lige smider et svar, så får du dine pts :)
Mange tak for hjælpen!
Avatar billede jakoba Nybegynder
08. marts 2007 - 13:42 #4
Nejtak. hvis det der virkelig virker skal jeg lære mere om regexps, ikke rage points ind :-))
Avatar billede arne_v Ekspert
11. marts 2007 - 17:46 #5
den er god nok med de 4 \

\ er escape tegn i Java så \\\\ bliver til \\
\ er også escape tegn i regexp så \\ bliver til \
Avatar billede jakoba Nybegynder
11. marts 2007 - 19:52 #6
takker arne.

Har du også en forklaring på tuborger omkring et pattern ?
Avatar billede arne_v Ekspert
11. marts 2007 - 19:59 #7
er de ikke helt literal ?

(se spørgsmåls tekst)
Avatar billede arne_v Ekspert
06. maj 2007 - 23:01 #8
tid at få afsluttet her ?
Avatar billede fizk Nybegynder
07. maj 2007 - 10:58 #9
Hvordan lukker man når der ikke er et svar?
Avatar billede arne_v Ekspert
07. maj 2007 - 12:40 #10
hvis der er nogen af kommentarerne som har hjulpet dig beder du ham eller dem om
at ligge et svar

hvis der slet ikke var noget brugbart ligger du selv et svar
Avatar billede fizk Nybegynder
07. maj 2007 - 13:46 #11
Ok ...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester