2017-02-03 4 views
1

ich einen regulären Ausdruck zu einem Build bin versucht, aber es gibt mir nicht den richtigen WertRegulärer Ausdruck mit [a-zA-Z] {0,2}

Bookss mit folgendem übereinstimmen sollte:

Books 
Bookss 
Booksss 

dh die Zeichenkette mit einem Zeichen entsprechen kann weniger oder mehr oder gleich

ich habe versucht, den regulären Ausdruck für den obigen Fall bauen, aber es stimmt nicht überein

Der reguläre Ausdruck habe ich versucht, ist:

String str="Books" 

Pattern p=Pattern.compile(str.substring(0,input.length()-1)+"[a-zA-Z]{0,2}" 

Matcher matcher = p.matcher(str); 

if (matcher.find()) 
{ 
    System.out.println("Found"); 
} 
+1

Es sieht so aus, als müssten Sie nur '*' an 'str' anhängen. Aber es ist eine gute Idee, 'Pattern.quote' it:' Pattern.compile (Pattern.quote (str) + "*") ''. Sie haben jedoch 'Bookss' in die Frage geschrieben und Sie haben' Books' im Code. Was sind die wirklichen Inputs und Regeln? BTW, siehe [diese Demo] (https://ideone.com/dQHQQk). –

+0

Das '*' macht das vorhergehende Atom optional, es passt 0 oder mehrmals. Ich denke, es ist das, wonach Sie suchen, oder? –

+0

Für Beispiel: Der Eingang ist Boo? S, für diesen Ausgang kann eine der folgenden sein 1. Buch/Booa 2. Bücher/Booka 3. Bookss/Bookaa, So baue ich einen regulären Ausdruck Buch. az] {0,2} – Neha

Antwort

0

Sie dies mit einem regex erreichen kann wie

/Book.?.?.?\b/ 

wie:

String str="Books" 

Pattern p=Pattern.compile(str.substring(0,input.length()-1)+".?.?.?\b"; 

Matcher matcher = p.matcher(str); 

if (matcher.find()) 
{ 
    System.out.println("Found"); 
} 

Der Ausdruck

.? 

entspricht null oder eins es

\b 

begrenzt es auf die Grenze eines Wortes. (Wenn der String-Eingang ist muliple Räume in ihm zu haben, lassen Sie dies aus)

so,

.?.?.?\b 

passt auf alle drei Zeichen am Ende des Wortes sie angehängt werden.

Edit: verpasste die Anforderung der Handhabung eines Zeichens weniger oder mehr.

+0

Ich glaube, er es für jedes Wort wollte sie eintraten. –

+0

es funktioniert für jedes Wort ... gegeben den Code oben ... Ich blieb nur bei seinem 'Bücher' Beispiel. Er könnte leicht ändern, was immer er möchte. – roninbv

0

Versuchen auf folgende Arten ..

Beispielcode

String str="Booksss"; 

    Pattern p=Pattern.compile(str.substring(0,str.length()-1)+".?{0,2}"); 
    System.out.println(p); 

    Matcher matcher = p.matcher(str); 

if (matcher.find()) 
{ 
    System.out.println("Found"); 
} 
    } 
} 

Hoffe, dass es Ihnen helfen.

0

Ich fand die Lösung. Danke an alle für die Beantwortung

String input="Book.s"; 

Pattern p=Pattern.compile(input.substring(0,input.length()-1)+"[a-zA-Z]{0,2}$"); 
Matcher matcher = p.matcher("Books"); 
if (matcher.find()) 
{ 
    System.out.println("Matches Regular Expression"); 
}  
+1

aber das passt auch 'Boo' wie in' ... p.matcher ("Boo"); ' –

+0

Bitte überprüfen Sie, sollte es passen "Boo" nicht – Neha