aviatorscript
aviatorscript copied to clipboard
正则表达式贪婪匹配问题
let s = '甲状腺组织一块,大小约4cm×3.8cm×1.5cm,切面见一个灰白色边界不清肿物,大小约1.5cm×1.4cm×5cm' let p = /甲状腺.?肿物.?大小.*?(\d+.?\d?)cm/; if s =~ p{ println($1); return $1; }else{ return nil; }
输出:5 使用java Pattern类匹配返回的是1.5 问题:是不是不支持非贪婪匹配?
理论上应该是一样,因为 aviator 内部也用的是 java 的 Pattern 类来编译正则。
理论上应该是一样,因为 aviator 内部也用的是 java 的 Pattern 类来编译正则。
我看aviator内部源码用的matcher方法匹配,我matcher和find这两个方法匹配后返回的结果不太一样, matcher方法源码注释是这样写的:Attempts to match the entire region against the pattern Pattern pattern = Pattern.compile("甲状腺.?肿物.?大小.?(\d{1,2}\.\d{0,3})cm"); Matcher matcher = pattern.matcher("甲状腺组织一块,大小约4cm×3.8cm×1.5cm,切面见一个灰白色边界不清肿物,大小约1.5cm×1.4cm×5cm");
while (matcher.find()){
System.out.println(matcher.group(1)); 这里输出1.5
}
if (matcher.matches()){
int groupCount = matcher.groupCount();
for (int i = 0; i <= groupCount; i++) {
System.out.println(matcher.group(i)); 这里输出5
}
}