目标:匹配java文件中不以import开头的语句行
把下面这个正则表达式放到Eclipse的文件搜索框中,搜索Test.java,结果为空
^\s*(?<!\bimport\b).+\npublic class Test { /**
 * @param args
 */
public static void main(String[] args) {
// ThreadFromRunnable tr = new ThreadFromRunnable();
// Thread thread = new Thread(tr);
// Thread thread2 = new Thread(tr);
//
// thread.start();
// thread2.start();

ThreadExtendsThread thread = new ThreadExtendsThread();
ThreadExtendsThread thread2 = new ThreadExtendsThread();
thread.start();
thread2.start(); }}这个正则表达式为什么不能匹配任何一行?

解决方案 »

  1.   

    (?!X) 专业名称为 Negative Lookahead,表示字符间缝隙后面不允许出现的字符, 
    即匹配字符间的缝隙,如果缝隙后的字符不是 X 的话,那这个缝隙就匹配成功。 
    举个例子,aab 和 aac,现有表达式 aa(?!b) 这时我们能匹配到的字符串是 aac, 
    因为 aa 的后面的缝隙之后不允许出现字符 b,因此只有 aac 进行了匹配。 下面的你就自己写吧。
      

  2.   

    String s = "imsportada";
    System.out.println(Pattern.matches("^(?:[^import]).*$", s));
      

  3.   

    "imsportada"不是以import开头,这个字符串应该能被匹配,但你的表达式返回false