本帖最后由 隋营营 于 2012-5-4 17:20 编辑
正在研究正则表达式,碰到了一个让人恶心的问题:
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Testext {
public static void main(String[] args) {
Pattern pn = Pattern.compile( ".{3}(?=a)" );
Matcher mr = pn.matcher( "521a88b" );
while (mr.find()) {
System.out.println(mr.group());
}
}
}
输出:521 (我理解为:结尾的是a,不在3个字符内)
将红色部分改为:"(?=a).{3}" 输出:a88 (我理解为:开头是a,在3个字符以内)
将红色部分改为:"(?!a).{3}" 输出:521 88b (我理解为:开头的不能是a)
将红色部分改为:".{3}(?!a)" 输出:21a 88b(我理解为:结尾字符不能是a)
可是我将红色部分改为:".{3}(?<!a)" 或"(?<!a).{3}" 后却输出了:521 a88 实在是理解不了!
who can help me? 要崩溃了!
|