Avatar billede Slettet bruger
24. februar 2004 - 15:44 Der er 6 kommentarer og
1 løsning

Endnu et spørgsmål fra n00b'en

Nu skal jeg så ha' Reg exp til at finde følgende tekst strenge..:

"bigint(20) NOT NULL auto_increment"
"int() NOT NULL auto_increment"
"int auto_increment"

Altså skal jeg nu definere et reg exp. som overholder disse regler:

1. skal starte med ordet "int", som kan have "big" til at preceede sig
2. derefter et eller flere blanktegn (er jo nok "\s*", ikke?)
3. så muligvis tekststrengen "NOT NULL" (kan måske være "(NOT NULL)*", ikke?...
4. derefter et eller flere blanktegn
5. slutteligt tekststrengen "auto_increment"

mit bedste bud på reg. exp. strengen er altså:

"big*\bint\w*(NOT NULL)*\w*auto_increment"

Ret endeligt mine fejl, be om :-)
Avatar billede Slettet bruger
24. februar 2004 - 15:52 #1
hovsa, jeg tager jo ikke højde for paranteserne og et eventuelt tal inden i dem....

Så må det jo næsten være:

"big*\bint(*\d*)*\w*(NOT NULL)*\w*auto_increment"

ejhhhhh, nu er jeg FØRST forvirret?
Avatar billede roenving Novice
24. februar 2004 - 16:02 #2
"(big)?int(\(\d*\))? *(not null)? auto_increment"

Går ud fra, at du alligevel skal bruge case Insensitive ...

Gruppen big kan forekomme
int skal være der
Umiddelbart derefter kan der være en gruppe med tal inde i paranteser
0 eller flere mellemrum før en eventuel forekomst af not null
et mellemrum og så teksten auto_increment
Avatar billede Slettet bruger
24. februar 2004 - 16:11 #3
ok, jeg har et par spørgsmål:

er "\w" ikke whitespace-karakteren? er det nok med " *", for så kan jeg ikke fatte brugen af "\w"-karakteren?

"?" går vel bare søgning case-insensitive?

Lige meget hvad, så skal du ha' dine point, det fungerer jo, lig venlist et svar....
Avatar billede roenving Novice
24. februar 2004 - 16:29 #4
\w betyder alle bogstaver, tal eller _ (underscore) -- altså word-karakterer ...
-- sikkert i modsætning til \s som er whiteSpace-karakterer (mellemrum, tab, nylinje m.m.)

? betyder 0 eller een gang !-)

-- og velbekomme '-)
Avatar billede Slettet bruger
24. februar 2004 - 16:33 #5
ok..... tak for oplysningerne, men hovsa.... der er jo noget som ikke fungerer, denne linie:

"CREATE TABLE staevne_klubber (  id bigint(20) NOT NULL auto_increment,  navn VARCHAR NOT NULL,  PRIMARY KEY  (id));"

Når jeg kører din reg. exp på den, så kan den ikke identificere bigint(20) NOT NULL auto_increment, i hvert fald ikke i min Java-kode (sig endelig til hvis jeg skal flytte spørgsmålet), jeg synes det bliver forvirrende når man skal bruge escape-characters foran (Java) sine escape-characters (Reg. exp):

Tjek f.eks lige det her ud...:

String toSearch = "CREATE TABLE staevne_klubber (  id bigint(20) NOT NULL auto_increment,  navn VARCHAR NOT NULL,  PRIMARY KEY  (id));";
        String regExp = "(big)?int(\\(\\d*\\))? *(not null)? auto_increment";
        String replaceWith = "IDENTITY";

        System.out.println("String before Reg Exp: "+toSearch);
        toSearch = toSearch.replaceAll(regExp, replaceWith);
        System.out.println("String after Reg Exp: "+toSearch);

Under alle omstændigheder skal du nok få dine point, det virker jo (for det meste, blot ikke lige i dette tilfælde :-|)
Avatar billede Slettet bruger
24. februar 2004 - 16:34 #6
linien skulle gerne komme til at se således ud:

"CREATE TABLE staevne_klubber ( id IDENTITY <og så videre, og så videre>"
Avatar billede roenving Novice
24. februar 2004 - 17:00 #7
Nu er jeg ikke klar over hvordan man angiver case insensitivity i Java, for det kunne være den, som skabte problemer, så jeg ville i hvert fald prøve:

        String regExp = "(big)?int(\\(\\d*\\))? *(NOT NULL)? auto_increment";

-- og der er nogle små afvigelser i implementeringerne af RegExps på tværs af sprogene, så det kan være at nogle tegn er specielle, hvilket jeg dog ikke tror her !-)

-- og tak for points ;~}
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