2016-09-02 1 views
0

私はたくさんのものを探しましたが、以下の質問に対しては完璧な解決策を得られません。Java正規表現を作成するには

regexを作成してパターンオブジェクトを作成し、 の文字列をMatcherとマッチングすることによって、文字列の値を文字列から取得するコードを作成しました。

public static void main(String[] args) { 
    ArrayList<String> list = new ArrayList<String>(); 
    list.add("product val='321ddfgsagsdf' find way"); 
    list.add("product val='781ertergdfv' find way"); 
    list.add("product val='96puil$hjgh&fgh' find way"); //Here special characters in string 
    list.add("product val='25errgfgsagsdf' find way"); 
    list.add("product val='562qweddfgsagsdf' find way"); 

    for (String string : list) { 
     Pattern myPat = Pattern.compile(" val='(.*?)'", 2); 
     Matcher m = myPat.matcher(string); 
     if (m.find()) { 
      System.out.println("Found value: " + m.group(1)); 
     }  } 
} 

ここでは、一重引用符内のrefの値を取得できます。

しかし、3番目の値はref値に "$"と "&"があります。これはパターンで処理したくありません。

文字列に特殊文字が含まれていてもそれを避けることができます。しかし、私はアプリが非常に大きな文字列をチェックしているので、正規表現を使ってそれを作りたいと思っています。

Java正規表現でこの特殊文字を避ける方法はありますか?

+1

?スペースは適格ですか?パーチシエーション? – Lucero

+2

あなたのコードは確実に機能しますか?あなたはマッチャーを実行していません。 –

+0

@Lucero、スペースと句読点は使用できません。 –

答えて

1

あなたは、この(つまり、インスタンスの英数字になりますが、あなたはまた、文字クラス[0-9a-z]かそこらを使用することができます)のような試合を制限することができます:あなたのケースでは、「特殊文字」とは何

Pattern myPat = Pattern.compile(" val='(\\w+)'", Pattern.CASE_INSENSITIVE); 
+0

このパターンのコードはコンパイルされません:[http://ideone.com/mCswNx](http://ideone.com/mCswNx)。 – DimaSan

+2

@DimaSanこれは、サンプルに 'import java.util.regex。*;'が一番上にないためです。これは私の答えとは関係ありません。 – Lucero

+0

よろしいですか、以下のような状況で私を助けてください。 "$"と "&"だけを避けたいが、他のすべての文字を許可する必要がある場合。 –