Java Regex用于在另一个关键字后面或后面显示关键字

时间:2017-01-10 19:45:27

标签: java regex

正则表达总是困惑我。我以为我知道的足够多,但是当我试图使模式更加健壮时,我总是偶然发现我不知道的案例

在java中,我说有一个单词“BSD”。我想在“BSD”之前或之后检测出任何带有“许可”字样的句子。 “许可”字样是强制性的。 我如何在Java Regex中做到这一点?

据我所知。

String REGEX = "(?i)(GNU)(\\s)+(license)?";
String contents1 = "This file is using GNU license.";
m = Pattern.compile(REGEX).matcher(contents1);
m.find();
System.out.println(m.group());

String contents2 = "This  licensed using GNU version 2 .";
m = Pattern.compile(REGEX).matcher(contents2);
m.find(); 
System.out.println(m.group());

2 个答案:

答案 0 :(得分:1)

如果您只想要一个Regex表达式来检查组合" ... GNU许可证......"和#34; ...许可证GNU ..."你可以尝试这样的事情:

String a = "abc GNU License 213";
String b = "abc License GNU 123";

Pattern patternA = Pattern.compile("^.*(((GNU)\\s(License))|((License)\\s(GNU))).*$");
Matcher matcherA = patternA.matcher(a);

    if (matcherA.matches()) {
        System.out.println("matcherA matched");
    }

Pattern patternB = Pattern.compile("^.*(((GNU)\\s(License))|((License)\\s(GNU))).*$");
Matcher matcherB = patternB.matcher(b);

    if (matcherB.matches()) {
        System.out.println("matcherB matched");
    }

它匹配任意数量的字符,后跟" GNU许可证"或"许可证GNU",后跟任意数量的字符。

答案 1 :(得分:1)

您可以使用

检查字符串是否包含licenseGNU(或BSD,无论您使用什么,取决于您的数据和您需要匹配的内容)
String REGEX = "^(?=.*license).*GNU";
String contents1 = "This  licensed using GNU version 2 .";
Matcher m = Pattern.compile(REGEX).matcher(contents1);
if (m.find()) {
    System.out.println("Found!");
}

请参阅this Java demo

模式匹配:

  • ^ - 字符串开头
  • (?=.*license) - 在任何0+字符之后需要一系列文字字符license的正面预测(如果不使用dotall修饰符,则不包括换行符)
  • .* - 在最后一次
  • 之前尽可能多地使用0个字符
  • GNU - 字面字符序列。