[Java] Probleem met haakjes in regexp

Pagina: 1
Acties:

  • Funcracker
  • Registratie: Juni 2001
  • Laatst online: 28-04 18:17

Funcracker

The LedZ Collective

Topicstarter
Dit moet voor Java freaks een ontzettende n00b vraag zijn, maar ik kan er nergens iets over vinden (gezocht op google en dit forum)..

Ik wil in Java zoiets eenvoudigs als "(3)" matchen met een regular expression. Natuurlijk is dit niet echt wat ik nodig heb maar na een hoop tests blijkt dat ik hier al op vast loop vanwege de haakjes..

Ik heb dit op de volgende manieren proberen te doen (met de volgende Patterns):

Pattern pTest = Pattern.compile("\\(\\w\\)");
Pattern pTest = Pattern.compile("(\\()\\w(\\))");
Pattern pTest = Pattern.compile("(\\\\()\\w(\\\\))");

Geen van de drie match ooit. Als ik iets anders dan haakjes gebruik (zoals slashes) werkt het wel, en met standaard zaken als alphanumerieke waarden ook.

Ik ben opgegroeid met PHP-style regular expressions, misschien speelt dat mij parten.. Ik heb het idee dat alles wel werkt alleen dat haakjes op een andere manier werken in java dan ik kennelijk gewend ben.

Kan iemand mij vertellen wat ik verkeerd doe?

I am one hell of a guy, I can do anything I want, only I just don't have the faintest idea what.
Zaphod Beeblebrox, in The Hitch Hiker's Guide To The Galaxy


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 15-04 22:07

NMe

Quia Ego Sic Dico.

Is het niet gewoon zo?
Java:
1
Pattern pTest = Pattern.compile("\(\w\)");

Dubbel escapen lijkt me niet echt nodig, maar aan de andere kant heb ik nog nooit regexps geschreven voor Java, dus ik kan het wel eens mishebben. :)

Hier gebruiken ze trouwens een Regex-object i.p.v. een Pattern, misschien dat dat nog verschil maakt?

[ Voor 24% gewijzigd door NMe op 30-05-2005 15:46 ]

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Verwijderd

The string literal "\(hello\)" is illegal and leads to a compile-time error; in order to match the string (hello) the string literal "\\(hello\\)" must be used.
Overigens dit stukje Java code:
Java:
1
2
3
4
5
6
    String source = "(3)";
    if (source.matches("\\(\\w\\)")){
      System.out.println("Match");
    } else {
      System.out.println("No match");
    }

levert "Match" op.

[ Voor 49% gewijzigd door Verwijderd op 30-05-2005 15:55 ]


  • Funcracker
  • Registratie: Juni 2001
  • Laatst online: 28-04 18:17

Funcracker

The LedZ Collective

Topicstarter
Yup, maar dat doe ik hierboven dus ook, en dat werkt bij mij dus niet :/

@-NMe-: Voor zover ik weet (en tot nu altijd met succes heb gedaan), moet je Strings die je Pattern.compiled altijd dubbel escapen. Bij het compilen valt er een backslash weg zodat er uiteindelijk een goede regular expression overblijft. En Regexp objects gebruik ik niet (wil ik graag zo houden ;)).

I am one hell of a guy, I can do anything I want, only I just don't have the faintest idea what.
Zaphod Beeblebrox, in The Hitch Hiker's Guide To The Galaxy


  • Kwistnix
  • Registratie: Juni 2001
  • Laatst online: 14:53
-NMe- schreef op maandag 30 mei 2005 @ 15:43:
Is het niet gewoon zo?
Java:
1
Pattern pTest = Pattern.compile("\(\w\)");

Dubbel escapen lijkt me niet echt nodig, maar aan de andere kant heb ik nog nooit regexps geschreven voor Java, dus ik kan het wel eens mishebben. :)

Hier gebruiken ze trouwens een Regex-object i.p.v. een Pattern, misschien dat dat nog verschil maakt?
Dubbel escapen is toch wel nodig? Je moet toch eerst de speciale betekenis van ( escapen binnen de regex met een \ en vervolgens moet je dat teken binnen Java weer escapen met een \
Lijkt mij.

  • Funcracker
  • Registratie: Juni 2001
  • Laatst online: 28-04 18:17

Funcracker

The LedZ Collective

Topicstarter
FallenAngel666 schreef op maandag 30 mei 2005 @ 16:05:
[...]


Dubbel escapen is toch wel nodig? Je moet toch eerst de speciale betekenis van ( escapen binnen de regex met een \ en vervolgens moet je dat teken binnen Java weer escapen met een \
Lijkt mij.
Dat klopt ja.
Niemand anders die hier ooit problemen mee heeft gehad? Of juist niet? ;)

I am one hell of a guy, I can do anything I want, only I just don't have the faintest idea what.
Zaphod Beeblebrox, in The Hitch Hiker's Guide To The Galaxy

Pagina: 1