07. marts 2007 - 20:02Der 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); } } } }
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+","...");
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)
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;
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.