2017-07-18 10 views
-3

私が言っていることは、正規表現の文字列の配列をフィルタリングするメソッドを作ることを試みていますが、これを達成できません。例えば、 。私は、アレイJava文字列の正規表現「number(number)」に一致します。

String[] items = ["6652(1).png", "7876(2).png", "7890-(1).jpg", "6543(1).JPG", "12249(3)-.PNG"] 

public ArrayList<String> filterByRegularExpress(String[] items) { 
    ArrayList<String> filteredStrings = new ArrayList<String>(); 
    for(String item: items) { 
     if(item.contains("regularexpression")){ // it is in here, i need to do some regular express for number(number). 
      filteredStrings.add(item); 
     } 
    } 
    System.out.print(filteredStrings); 
} 

はそう結果は"6652(1).png" , "7876(2).png" , "6543(1).JPG"私は、このような正規表現を書くにはどうすればよいだけ

でしょうか? 助けていただきありがとうございます。

+1

正規表現に関するさまざまなオンラインチュートリアルの1つをチェックして、さまざまなオンラインregExツールで作成した式を確認してください。 – JacksOnF1re

+0

なぜあなたはこれを達成できませんか? – Flown

+0

ところで..containsは文字列を比較します。したがって、部分文字列が見つかった場合は、呼び出す文字列の中に含まれています。正規表現が "マッチする"かどうかを確認したい場合は、代わりにstring.matches(regEx)を使用してください。 – JacksOnF1re

答えて

0

あなたは、正規表現のJavaを1としてパターン

Pattern p = Pattern.compile("\\d+"); 
Matcher m = p.matcher("There are more than -2 and less than 12 numbers here"); 
while (m.find()) { 
    System.out.println(m.group()); 
} 

でそれを行うことができ、+は「1回以上」を意味し、\ dは、「数字」を意味します。

注:「二重のバックスラッシュは、」単一のバックスラッシュを取得するためのエスケープシーケンスである - そのため、Javaの文字列で\ dは、あなたの実際の結果を与える:\ dの

+0

私は、string.matches()の代わりにPatternとmatcherを使用して、for()繰り返しごとにパターンを作成しない方法が好きです。さらに、検索とグループの必要はありません。 m.matches == trueの場合、文字列を結果リストに追加できます。 – JacksOnF1re

1

は、あなたの方法の身体のためにこれを試してみてください。

ArrayList<String> filteredStrings = new ArrayList<String>(); 
Pattern pat = Pattern.compile("\\A\\d+\\(\\d+\\)\\..+\\z"); 
for(String item: items) { 
    Matcher matcher = pat.matcher(item); 
    if(matcher.matches()){ // it is in here, i need to do some regular express for number(number). 
     filteredStrings.add(item); 
    } 
} 
System.out.print(filteredStrings); 

これので、エスケープされリテラル開口括弧が続く数字(少なくとも1つの、しかし、\\d+)任意の数続く入力(\\A)の開始に基づいて文字列を、一致しますRegex(\\()で特別な意味を持ち、bracとの間の任意の桁数kets(あなたのシナリオでは1桁しかできない場合は、単に+を取り除いてください)、そして閉じ括弧を再び開き、次にリテラルのようにエスケープして、特別な意味でエスケープします。 Regex(\\.)では、「任意の文字」を意味する。の特別な意味を使用します。ここに任意の数の文字(.+)が続き、その後に文字列の末尾が続きます(\\z)。要約すると、人間が判読可能な方法で、これはnumber(number).anythingと一致します。あなたの例では、私はそれをテストし、正しい出力[6652(1).png, 7876(2).png, 6543(1).JPG]を得ました。

関連する問題