//String s = "Windows 98";
//String s = "Windows 97";
String s = "Windows 2000";
Matcher m = Pattern.compile("Windows\\s(?!98|2000|NT)").matcher(s);
System.out.println(m.find());;

解决方案 »

  1.   


    感谢回答
    但是你这个貌似有点问题啊:
    首先你用的是find,也就是部分匹配,如果你改成matches就不对了
    还有就是对于Windows 97和Windows988这种都应该为true
      

  2.   

    额,你先帮我解决然后再打哈
    真是孺子不可教啊,现成的教程:自己去好好了解,3楼的意思懂的话就不用看教程了,不要生气啊,只是活跃下气氛
    http://msdn.microsoft.com/zh-cn/library/ae5bf541(v=vs.80).aspx
      

  3.   

    额,你先帮我解决然后再打哈
    真是孺子不可教啊,现成的教程:自己去好好了解,3楼的意思懂的话就不用看教程了,不要生气啊,只是活跃下气氛
    http://msdn.microsoft.com/zh-cn/library/ae5bf541(v=vs.80).aspx
    额,头一次被人说成这样啊,好桑心
    我回复3L的你没看到?,你发的链接我早看过了,你帮我解决下吧
      

  4.   

    额,你先帮我解决然后再打哈
    真是孺子不可教啊,现成的教程:自己去好好了解,3楼的意思懂的话就不用看教程了,不要生气啊,只是活跃下气氛
    http://msdn.microsoft.com/zh-cn/library/ae5bf541(v=vs.80).aspx
    你发的是微软的东西吧,我要的是java的,可能会不一样
      

  5.   

    public static void main(String[] args) {
    String source = "Windows 2000200";
    String reg = "(Windows\\s(?!\\b2000\\b|\\b98\\b|\\bNT\\b))(.?+)";
    Pattern pattern = Pattern.compile(reg);
    boolean f = source.matches(reg);
    System.out.println(f);
    }
    自己去验证吧,不合要求,再讨论讨论
      

  6.   

    一不小心就搞错了,String reg = "(Windows\\s(?!\\b2000\\b|\\b98\\b|\\bNT\\b))(.+?)";
      

  7.   

    String reg = "(Windows(\\s?)(?!\\b2000\\b|\\b98\\b|\\bNT\\b))(.+?)";
      

  8.   

    如果是从一段文字里找出的话,正则如下:\bWindows\s+(?!(?:98|2000|NT)\b).+\b
    如果是判断一个字符串是否正确的话,正则如下:^Windows\s+(?!(?:98|2000|NT)$).+$
      

  9.   

    感谢回答
    但是对于这种:
    Windows 98 8
    还是不行
      

  10.   

    感谢回答
    但是对于这种:
    Windows 98 8
    还是不行
    这是因为没有考虑空格的情况,你前面没提到,你把后面的 点 改成 “[\da-zA-Z]” 就行了,
    我的正则:^Windows\s+(?!(?:98|2000|NT)$)[\da-zA-Z]+$
      

  11.   

    我想问一下String reg = "(Windows(\\s?)(?!\\b2000\\b|\\b98\\b|\\bNT\\b))(.+?)";
    中间的?!是什么意思
    ?不是表时前面的表达式出现0次或者一次吗
    !第一次看到
      

  12.   


    public class TestTmp { 
        public static void main(String[] args) {
         String str="Windows 998";
            //^Windows\s+(?!(?:98|2000|NT)$)[\da-zA-Z]+$
            System.out.println(str.matches("^Windows\\s+(?!(?:98|2000|NT)$)[\\da-zA-Z]+$"));
        }
    }
      

  13.   


    感谢回答
    但是你这个貌似有点问题啊:
    首先你用的是find,也就是部分匹配,如果你改成matches就不对了
    还有就是对于Windows 97和Windows988这种都应该为true正则表达式用Windows\\s(?<=\\b98|2000|NT)\\b,即匹配以Windows开头,后面跟98、2000、NT的字符串,匹配成功,则不满足,失败则说明Windwos后面跟的是98/2000/NT以外的字符。Windows988/20007什么的都可以。
    刚看到贴还未验证,如有错误求指正。
      

  14.   

    哎,原来你只要不是”Windows 98"    “Windows 2000"  "Windows NT"字符串就行了,如果你是想用matches的结果的话,那直接使用String reg = "Windows\\s(2000|NT|98)";  然后matches的结果取反,这样就会什么都行的吧。
      

  15.   

    这个应该可以了  String reg = "(?!Windows\\s(2000|NT|98)$).+?";