2012-01-19 8 views
1

私はテキスト[LINK REMOVED FROM EVIDENCE AT REQUEST OF TRIAL JUDGE]テキスト入力からのハイパーリンクをサニタイズするより良い方法はありますか?

public String overwriteLinks(String text){ 
    final String OVERWRITE_WITH = "[LINK REMOVED FROM EVIDENCE AT REQUEST OF TRIAL JUDGE]"; 

    List<String> checkForPatterns = Arrays.asList(
     "http://", "www", ".com", ".net", 
     ".org", "dot com", "dot net"); 

    StringBuilder re = new StringBuilder(); 
    for (String checkForPattern : checkForPatterns){ 
     if (re.length() > 0) 
      re.append("|"); 
     String quotedSite = Pattern.quote(checkForPattern); 
     re.append(quotedSite); 
    } 

    Pattern p = Pattern.compile(re.toString(),Pattern.CASE_INSENSITIVE); 
    text = p.matcher(text).replaceAll(OVERWRITE_WITH); 

    return text; 
} 

に置き換える、与えられたテキストから任意のハイパーリンクを削除し、ハイパーリンクのように見える任意の断片を上書きしようとしているリンクの数を最大化するためにこれを行うには良い方法はありますそれは削除されますか?最高の私の正規表現のスキルはiffyです。

答えて

1

は、この正規表現を使用してみてください:

public static final URI_REGEX = Pattern.compile("^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?"); 

私はURIのRFC年前から私たちのコードベースで1つを作成/インポート覚えているようです。これはあなたの文字列内のすべてのURIと一致し、簡単に置換できるようにする必要があります。

+0

+1 3986パターンを使用しています。グループ1にはプロトコルが含まれ、グループ4には権限が含まれていることに注意してください。これは、おそらくリンクではない有効な相対URLをフィルタリングする良い方法です。たとえば、 'the'や' a'は有効な相対URLです。 –

+0

ええ - それを解析して検証するためにこれを使用するので、グループはURLの有用な部分を表す必要があります。頭にhttp(s)://を要求するように簡単に変更できます。 – sarumont

0

Java Regex TutorialのLars Vogel( "6.4。リンクチェッカーの作成")の例に従ってクラスを作成し、OVERWRITE_WITH文字列で見つかったリンクを置き換えるメソッドを使用してクラスを拡張できます。

Larsがあなたの特定のニーズに合わせて提供するサンプルを調整する必要がありますが、必要に応じてアプリケーションの他の部分で使用できるリンク処理クラスがあります。

関連する問題