求一正则表达式

dxqrr 2014-04-04 03:20:51
Windows 98
Windows 2000
Windows NT
求一正则表达式,前面必须是Windows,中间一个空格,后面不能是98,2000,NT,其他的都行
比如
Windows 988,Windows 97都可以
...全文
404 27 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
27 条回复
切换为时间正序
请发表友善的回复…
发表回复
dxqrr 2014-04-09
  • 打赏
  • 举报
回复
感谢各位回答,结贴
swjtueducn2 2014-04-08
  • 打赏
  • 举报
回复
引用 24 楼 dxqrr 的回复:
[quote=引用 23 楼 swjtueducn2 的回复:] 这个应该可以了 String reg = "(?!Windows\\s(2000|NT|98)$).+?";
弱弱的问句: .+?和.*有区别么[/quote] 没有吧,我也没有研究过细微的差别,只是人的习惯不一样吧。
dxqrr 2014-04-07
  • 打赏
  • 举报
回复
引用 23 楼 swjtueducn2 的回复:
这个应该可以了 String reg = "(?!Windows\\s(2000|NT|98)$).+?";
弱弱的问句: .+?和.*有区别么
swjtueducn2 2014-04-04
  • 打赏
  • 举报
回复
这个应该可以了 String reg = "(?!Windows\\s(2000|NT|98)$).+?";
laserw9 2014-04-04
  • 打赏
  • 举报
回复
引用 18 楼 ningbohezhijun 的回复:
[quote=引用 17 楼 dxqrr 的回复:] [quote=引用 16 楼 ningbohezhijun 的回复:] 我想问一下String reg = "(Windows(\\s?)(?!\\b2000\\b|\\b98\\b|\\bNT\\b))(.+?)"; 中间的?!是什么意思 ?不是表时前面的表达式出现0次或者一次吗 !第一次看到
这个是特殊构造(非捕获)[/quote] 能说的具体点吗,或者给个可以百度的关键词,非常谢谢![/quote] 去百度 “正则表达式30分钟”,在后面讲到
swjtueducn2 2014-04-04
  • 打赏
  • 举报
回复
哎,原来你只要不是”Windows 98" “Windows 2000" "Windows NT"字符串就行了,如果你是想用matches的结果的话,那直接使用String reg = "Windows\\s(2000|NT|98)"; 然后matches的结果取反,这样就会什么都行的吧。
maoyu123456789 2014-04-04
  • 打赏
  • 举报
回复
引用 3 楼 dxqrr 的回复:
[quote=引用 2 楼 rui888 的回复:]
//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());;
感谢回答 但是你这个貌似有点问题啊: 首先你用的是find,也就是部分匹配,如果你改成matches就不对了 还有就是对于Windows 97和Windows988这种都应该为true[/quote] 正则表达式用Windows\\s(?<=\\b98|2000|NT)\\b,即匹配以Windows开头,后面跟98、2000、NT的字符串,匹配成功,则不满足,失败则说明Windwos后面跟的是98/2000/NT以外的字符。Windows988/20007什么的都可以。 刚看到贴还未验证,如有错误求指正。
laserw9 2014-04-04
  • 打赏
  • 举报
回复

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]+$"));
    }
}
ningbohezhijun 2014-04-04
  • 打赏
  • 举报
回复
引用 17 楼 dxqrr 的回复:
[quote=引用 16 楼 ningbohezhijun 的回复:] 我想问一下String reg = "(Windows(\\s?)(?!\\b2000\\b|\\b98\\b|\\bNT\\b))(.+?)"; 中间的?!是什么意思 ?不是表时前面的表达式出现0次或者一次吗 !第一次看到
这个是特殊构造(非捕获)[/quote] 能说的具体点吗,或者给个可以百度的关键词,非常谢谢!
dxqrr 2014-04-04
  • 打赏
  • 举报
回复
引用 16 楼 ningbohezhijun 的回复:
我想问一下String reg = "(Windows(\\s?)(?!\\b2000\\b|\\b98\\b|\\bNT\\b))(.+?)"; 中间的?!是什么意思 ?不是表时前面的表达式出现0次或者一次吗 !第一次看到
这个是特殊构造(非捕获)
ningbohezhijun 2014-04-04
  • 打赏
  • 举报
回复
我想问一下String reg = "(Windows(\\s?)(?!\\b2000\\b|\\b98\\b|\\bNT\\b))(.+?)"; 中间的?!是什么意思 ?不是表时前面的表达式出现0次或者一次吗 !第一次看到
laserw9 2014-04-04
  • 打赏
  • 举报
回复
引用 14 楼 dxqrr 的回复:
[quote=引用 11 楼 swjtueducn2 的回复:] String reg = "(Windows(\\s?)(?!\\b2000\\b|\\b98\\b|\\bNT\\b))(.+?)";
感谢回答 但是对于这种: Windows 98 8 还是不行[/quote] 这是因为没有考虑空格的情况,你前面没提到,你把后面的 点 改成 “[\da-zA-Z]” 就行了, 我的正则:

^Windows\s+(?!(?:98|2000|NT)$)[\da-zA-Z]+$
dxqrr 2014-04-04
  • 打赏
  • 举报
回复
引用 11 楼 swjtueducn2 的回复:
String reg = "(Windows(\\s?)(?!\\b2000\\b|\\b98\\b|\\bNT\\b))(.+?)";
感谢回答 但是对于这种: Windows 98 8 还是不行
laserw9 2014-04-04
  • 打赏
  • 举报
回复
如果是从一段文字里找出的话,正则如下:

\bWindows\s+(?!(?:98|2000|NT)\b).+\b
如果是判断一个字符串是否正确的话,正则如下:

^Windows\s+(?!(?:98|2000|NT)$).+$
swjtueducn2 2014-04-04
  • 打赏
  • 举报
回复
String reg = "(Windows(\\s?)(?!\\b2000\\b|\\b98\\b|\\bNT\\b))(.+?)";
swjtueducn2 2014-04-04
  • 打赏
  • 举报
回复
引用 9 楼 swjtueducn2 的回复:
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); } 自己去验证吧,不合要求,再讨论讨论
一不小心就搞错了,String reg = "(Windows\\s(?!\\b2000\\b|\\b98\\b|\\bNT\\b))(.+?)";
swjtueducn2 2014-04-04
  • 打赏
  • 举报
回复
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); } 自己去验证吧,不合要求,再讨论讨论
dxqrr 2014-04-04
  • 打赏
  • 举报
回复
引用 6 楼 swjtueducn2 的回复:
[quote=引用 5 楼 dxqrr 的回复:] [quote=引用 4 楼 swjtueducn2 的回复:] 我擦,这都是一些教程里面的活生生的例子,楼主学习不主动啊要打屁屁
额,你先帮我解决然后再打哈[/quote] 真是孺子不可教啊,现成的教程:自己去好好了解,3楼的意思懂的话就不用看教程了,不要生气啊,只是活跃下气氛 http://msdn.microsoft.com/zh-cn/library/ae5bf541(v=vs.80).aspx[/quote] 你发的是微软的东西吧,我要的是java的,可能会不一样
dxqrr 2014-04-04
  • 打赏
  • 举报
回复
引用 6 楼 swjtueducn2 的回复:
[quote=引用 5 楼 dxqrr 的回复:] [quote=引用 4 楼 swjtueducn2 的回复:] 我擦,这都是一些教程里面的活生生的例子,楼主学习不主动啊要打屁屁
额,你先帮我解决然后再打哈[/quote] 真是孺子不可教啊,现成的教程:自己去好好了解,3楼的意思懂的话就不用看教程了,不要生气啊,只是活跃下气氛 http://msdn.microsoft.com/zh-cn/library/ae5bf541(v=vs.80).aspx[/quote] 额,头一次被人说成这样啊,好桑心 我回复3L的你没看到?,你发的链接我早看过了,你帮我解决下吧
swjtueducn2 2014-04-04
  • 打赏
  • 举报
回复
引用 5 楼 dxqrr 的回复:
[quote=引用 4 楼 swjtueducn2 的回复:] 我擦,这都是一些教程里面的活生生的例子,楼主学习不主动啊要打屁屁
额,你先帮我解决然后再打哈[/quote] 真是孺子不可教啊,现成的教程:自己去好好了解,3楼的意思懂的话就不用看教程了,不要生气啊,只是活跃下气氛 http://msdn.microsoft.com/zh-cn/library/ae5bf541(v=vs.80).aspx
加载更多回复(5)

62,635

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧