我正在使用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版本。我究竟做错了什么?
答案 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)