Regex: doppelte Zeichen erkennen

Gast #6019352
Lesenswert?

Es geht um ein Java-Test/Lernprogramm zum Thema Regex. Dabei sollen in 
einem String bestimmte Zeichen nicht doppelt vorkommen dürfen. In dem 
Beispiel geht es nicht ums Ersetzen (so finde ich nämlich 1000ende 
Beispiele im Web), sondern nur darum, es festzustellen bzw. im Code 
unten NICHT auszugeben.

Es sollen also alle Textstücke aus dem String Quelle ausgegeben werden, 
die Großbuchstaben, Kleinbuchstaben oder Ziffern enthalten. Minus und 
Tiefstrich sind erlaubt, aber nicht direkt hintereinander. Ich weiss 
dass man ein Verbot in der Form ausdrücken kann: ^[abc], aber ich will 
ja doppelte Zeichen verbieten. Wie muss ich das pattern verändern, damit 
bei direkt zusammen auftretenden "--" oder "__" KEIN Treffer erzielt 
wird?
1
   String quelle="Bla bla ....";
2
   String pattern= "[A-Z,a-z,0-9-_]";   // <- hier fehlt das Verbot
3
   
4
   Pattern p = Pattern.compile(pattern);      
5
   Matcher m = p.matcher(quelle);  
6
        
7
   while (m.find()){
8
      int start = m.start();         
9
      int end = m.end();          
10
      String part = base.substring(start, end);
11
      System.out.println(part); 
12
   }
Gast #6019389
Lesenswert?

Hallo,

wäre es Perl, könnte ich Dir helfen:
1
#!/usr/bin/perl
2

3
use strict;
4
use warnings;
5

6
my $string = "Diieserrrr StrinnGGG enthhaellt doppelte ZZeicheen";
7

8
while( $string =~ m/([a-zA-Z0-9-_])(\1+)/g) {
9
        print "$1 gefolgt von $2...\n";
10
}

Zur Erklärung des Regex:
1
([a-zA-Z0-9-_])
...definiert die Zeichenklasse, die Du grundsätzlich auf Duplikate 
untersuchen willst. Die runden Klammern um diese Zeichenklasse bewirken, 
dass der Treffer referenzierbar... was dann im zweiten Teil geschieht

Das nachfolgende
1
(\1+)
referenziert auf das zuvor gefundene Zeichen \1 und prüft, ob es 
mindestens
einmal folgt (+)...

In der Zeichenkette "abcdef" trifft der Regex also nicht zu. Zwar passen 
die Zeichen auf die definierte Zeichenklasse, der Quantifier passt aber 
nicht...

Die Zeichenkette "aabcdeef" hingegen hat zwei Fälle, in denen auch der 
Quantifier passt.

Diese werden dann ausgegeben.

In Java kann ich es leider nicht, aber ich bin sicher, dass es dort auch 
back-references gibt.



Und das nachfolgende

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren