Java-Regex用于不包含子字符串后跟任何字符的字符串

时间:2017-03-10 15:06:24

标签: java regex

我想在Java中找到一个适用于Windows Server 2008操作系统版本的正则表达式,该版本不包含" R2" 正在使用我正在使用的正则表达式 -

(?i)Win\w*\s*(?i)Server\s*(2008)\s*(?!R2)\s*\w*

可能的值:

  • Windows Server 2008 datacenter - 正确匹配
  • Windows Server 2008 - 正确匹配
  • Windows Server 2008 R2 Datacenter - 不匹配
  • Windows Server 2008 r2 datacenter - 不匹配
  • Windows Server 2008 R2 - 匹配错误(因为R2符合正则表达式中的\w*

我在正则表达式中做错了什么?

2 个答案:

答案 0 :(得分:1)

您可以考虑使用以下正则表达式

import java.util.regex.Matcher;
import java.util.regex.Pattern;

class RegEx {
    public static void main(String[] args) {
        String s = "Windows Server 2008 datacenter";
        String r = "(?i)Win\\w*\\s*Server\\s*(2008)(?!\\sR2).*?$";
        Pattern p = Pattern.compile(r);
        Matcher m = p.matcher(s);
        while (m.find()) {
            System.out.println(m.group());
        }
    }
}

参见 regex demo

Java demo

AnnotationConfigApplicationContext(PseudoSpringBootApplication.class)

答案 1 :(得分:0)

正则表达式匹配字符串(如果它包含R2

private boolean isR2(String text) {
         return (text.toLowerCase().matches(".*r2.*"));
    }

没有正则表达式,你可以做

private boolean isR2(String text) {
     return (text.toLowerCase().indexOf("r2")>0);
}

正确匹配所有示例:

  • Windows Server 2008 datacenter // false
  • Windows Server 2008 //false
  • Windows Server 2008 R2 Datacenter //true
  • Windows Server 2008 r2 datacenter //true
  • Windows Server 2008 R2 //true