私は特定のプラットフォームに一致するようにjava正規表現を使用しています。 は例えば、文字列の私のリストは以下のとおりです。これらのことからオプションのかっこ内の1つの単語を一致させる
Ruby 2.1 (Puma)
Ruby 2.3 (Passenger Standalone)
Ruby 2.2 (Puma)
Ruby 2.2 (Passenger Standalone)
Ruby 1.9.6
私は唯一の旅客standloneでないものを選ぶにしたいです。すなわち、 Ruby 2.1(Puma)およびRuby 2.2(Puma)およびRuby 1.9.6唯一の制約条件は、バージョン名、すなわちPumaまたはPassenger Standaloneがオプションであることです。私は文字列のArrayListのようなオプションを持っている
"Ruby (.*)\s+\(?\w{0,1}\)?$"
:私は、次の正規表現を使用しようとしています
ので、括弧と括弧内の文字列はオプションです。
public void displayVersions(String platform) {
String regex = "Ruby (.*)\s+\(?\w{0,1}\)?$";
List<String> availableVersions = getAvailableVersions();
List<String> filtered = availableVersions.stream()
.filter(version -> version.matches(regex))
.collect(Collectors.toList());
System.out.println(filtered);
}
正規表現が間違っていると私は正しい結果を得ていないのです:私のメソッドのコードは次のようになります。私はPassenger Standaloneバージョンのみを取得します。私は間違って何をしていますか?
'.filter(version - > version.indexOf(" Passenger Standalone ")<0)'だけではないのはなぜですか? – 9000