我有一个小测试脚本的问题:
import java.util.regex.Pattern;
import java.util.regex.Matcher;
cfgText = "PATTERN1 = 9\nPATTERN2 = 136.225.73.44\nPATTERN3 = 136.225.236.12"
cfgLine = cfgText.split('\n');
def p = /.*PATTERN2.*/;
def PATTERN2_found = false;
for (i=0; PATTERN2_found==false && i < cfgLine.length; i++)
{
println("cfgLine" +i+ ": " + cfgLine[i]);
def m = cfgLine[i] =~ p;
println("m: " + m)
println("m.asBoolean(): " + m.asBoolean());
println("m: " + m)
println("m.asBoolean(): " + m.asBoolean());
if(m.asBoolean()){
println("Heeeyyyy");
}
println("--------------------------------");
}
这是它的输出:
cfgLine0: PATTERN1 = 9
m: java.util.regex.Matcher[pattern=.*PATTERN2.* region=0,12 lastmatch=]
m.asBoolean(): false
m: java.util.regex.Matcher[pattern=.*PATTERN2.* region=0,12 lastmatch=]
m.asBoolean(): false
--------------------------------
cfgLine1: PATTERN2 = 136.225.73.44
m: java.util.regex.Matcher[pattern=.*PATTERN2.* region=0,24 lastmatch=]
m.asBoolean(): true
m: java.util.regex.Matcher[pattern=.*PATTERN2.* region=0,24 lastmatch=PATTERN2 = 136.225.73.44]
m.asBoolean(): false
--------------------------------
cfgLine2: PATTERN3 = 136.225.236.12
m: java.util.regex.Matcher[pattern=.*PATTERN2.* region=0,25 lastmatch=]
m.asBoolean(): false
m: java.util.regex.Matcher[pattern=.*PATTERN2.* region=0,25 lastmatch=]
m.asBoolean(): false
如您所见,正则表达式在第二个循环中匹配,但这种行为对我来说很奇怪。我真的不知道为什么如果我asBoolean对同一个 Matcher 对象使用两次,结果是不同的。它有内部迭代器或类似的东西吗?
PS:我已经使用==~运算符解决了这个问题,但我想知道为什么 asBoolean 会这样工作。
九州编程
相关分类