匹配可选括号内的单个单词

时间:2016-12-23 18:07:51

标签: java regex

我正在使用java正则表达式来匹配特定平台。 例如,我的字符串列表是:

Ruby 2.1 (Puma)
Ruby 2.3 (Passenger Standalone)
Ruby 2.2 (Puma)
Ruby 2.2 (Passenger Standalone)
Ruby 1.9.6

从这些我想只选择那些不是乘客站立的人。即。 Ruby 2.1(Puma)和Ruby 2.2(Puma)和Ruby 1.9.6。唯一的限制/条件是版本名称,即Puma或Passenger Standalone是可选的。因此括号和括号内的字符串是可选的

我正在尝试使用以下正则表达式:

"Ruby (.*)\s+\(?\w{0,1}\)?$"

我有选项作为字符串的ArrayList。我的方法代码如下:

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版本。我究竟做错了什么?

3 个答案:

答案 0 :(得分:0)

修正了正则表达式:Ruby ([0-9.]+)\s?\(?[^\s]*\)?$

如果要匹配的字符串是多行

,您可能还需要添加/m选项

我个人建议您https://regex101.com检查和调试正则表达式。例如https://regex101.com/r/c148v8/2

答案 1 :(得分:0)

<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">

这样就可以了。

Ruby [0-9.]+ \((\S)\)与ruby版本匹配

Ruby [0-9.]+匹配括号内的任何非空白字符。

答案 2 :(得分:0)

使用嵌套选项:

^Ruby \d+(\.\d+)*( \(?\w+\)?)?$

请参阅live demo

相关问题