2016-11-22 8 views
0

Dies ist mein Code in meinem Mapper.Falscher regulärer Ausdruck für Mapper

result.put("contentThumbUrl", getThumbUrl(extractor.extract("youtube.videolink").asText(), false)); 
      result.put("contentThumbSmallUrl", getThumbUrl(extractor.extract("youtube.videolink").asText(), true)); 

Meine Funktion ist:

private String getThumbUrl(String videoId, boolean small) { 
     videoId = videoId.replaceAll("http://www\\.youtube\\.([a-z]{2}|[a-z]{3})/watch\\?v=.|https://www\\.youtube\\.([a-z]{2}|[a-z]{3})/watch\\?v=", ""); 
     if(small) { 
      return "http://img.youtube.com/vi/" + videoId + "/2.jpg"; 
     } 
     return "http://img.youtube.com/vi/" + videoId + "/0.jpg"; 
    } 

Doch ich das falsche Ergebnis bekam.

"contentThumbSmallUrl":"http:\/\/img.youtube.com\/vi\/https:\/\/www.youtube.com\/watch?v=lEBwKBJ8Leg\/2.jpg" 
and 
contentThumbUrl":"http:\/\/img.youtube.com\/vi\/https:\/\/www.youtube.com\/watch?v=lEBwKBJ8Leg\/0.jpg" 

Gibt es sowieso ich kann es korrigieren. Ich weiß nicht, ob mein regulärer Ausdruck korrekt ist. Gibt es irgendeine Möglichkeit, meinen regulären Ausdruck zu verkürzen?

Antwort

0

Ich weiß nicht, warum es auf diesem Text fehlschlägt. Es sieht jedoch seltsam aus, mit den entkommenen Schrägstrichen (\/). Nur Backslashes (\) sollten maskiert werden. Sie sollten Ihre Eingabe überprüfen.

Das einzige Problem mit der Regex kann ich sehen, ist eine unwichtige Periode (.) nach der ersten Hälfte: \\?v=.|https://. Es würde ein zusätzliches Zeichen aus der Video-ID entfernen.

das Muster zu verkürzen, können Sie dies tun könnte:

"http(s)?://www\\.youtube\\.([a-z]{2,3})/watch\\?v=" 

Die Klammern sind optional, aber Hilfsmittel Lesbarkeit.

Demo: https://regex101.com/r/9gRG8Q/1