2016-04-14 8 views
0

Ich habe den folgenden Text bekam: Unbekannter Fehler: while trying to invoke the method test() of a null object loaded from local variable 'libInfo'Regex mit einem beliebigen Zeichen vor und nach der angegebenen Zeichenfolge

Matcher matcher = null; 
Pattern pattern = null; 
try 
{ 
    pattern = Pattern.compile(".*" + "Unbekannter Fehler: while trying to invoke the method test() of a null object loaded from local variable 'libInfo'" + ".*", Pattern.CASE_INSENSITIVE & Pattern.DOTALL); 
    matcher = pattern.matcher("Unbekannter Fehler: while trying to invoke the method test() of a null object loaded from local variable 'libInfo'"); 

    if (matcher.matches()) 
     System.out.println("Same!"); 
} 

Wenn ich den obigen Code ausführen, gibt sie false, aber warum? Ich möchte nur prüfen, ob der Text von dem anderen mit regulärem Ausdruck enthalten ist (Nr. String.contains(...)). Wenn ich es richtig lese, muss ich am Anfang und am Ende der Regex .* verwenden, um sicher zu sein, dass es nie darauf ankommt, was vor oder nach der Zeichenfolge zu überprüfen ist.

+0

Halte mit Zeichen aus den Mustern zu entfernen, bis sie paßt, dann werden Sie wissen, welche Zeichen verursachen sie nicht übereinstimmen. –

Antwort

3

Stellen Sie sicher, dass alle Ihre Zeichen ordnungsgemäß zuerst ausgeblendet werden. Versuchen Pattern#quote

String test = "Unbekannter Fehler: while trying to invoke the method test() of a null object loaded from local variable 'libInfo'"; 

Pattern pattern = Pattern.compile(".*" + Pattern.quote(test) + ".*", Pattern.CASE_INSENSITIVE & Pattern.DOTALL); 
Matcher matcher = pattern.matcher(test); 

if (matcher.matches()) { 
    System.out.println("Same!"); 
} 
1

Sie müssen die Klammern im Muster angeben. obwohl

pattern = Pattern.compile("Unbekannter Fehler: while trying to invoke the method test\\(\\) of a null object loaded from local variable 'libInfo'", Pattern.CASE_INSENSITIVE & Pattern.DOTALL); 

Sie sollten die .* am Anfang nicht brauchen, noch das Ende.

Mit freundlichen Grüßen