用于在另一个关键字后面或后面显示关键字的Java正则表达式
Regex总是让我困惑。我想我知道的已经足够多了,但是当我试图使一个模式更加健壮时,我总是会遇到一些我不知道的情况 在java中,假设我有一个单词“BSD”。我想检测任何在单词“BSD”之前或之后有单词“license”的句子。“许可证”一词的出现是强制性的。 在Java正则表达式中如何做到这一点 这是据我所知用于在另一个关键字后面或后面显示关键字的Java正则表达式,java,regex,Java,Regex,Regex总是让我困惑。我想我知道的已经足够多了,但是当我试图使一个模式更加健壮时,我总是会遇到一些我不知道的情况 在java中,假设我有一个单词“BSD”。我想检测任何在单词“BSD”之前或之后有单词“license”的句子。“许可证”一词的出现是强制性的。 在Java正则表达式中如何做到这一点 这是据我所知 String REGEX = "(?i)(GNU)(\\s)+(license)?"; String contents1 = "This file is using GNU licens
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());
如果您只希望正则表达式检查“…GNU许可证…”和“…许可证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许可证”或“License GNU”,后跟任意数量的字符。您可以使用 看 模式匹配:
-字符串的开头^
-在任何0+个字符之后需要一系列文字字符的正向前瞻性(?=.*license)
(如果未使用dotall修饰符,则不包括换行字符)license
-尽可能多的0+字符,直到最后一个字符*
-文字字符序列GNU
license
和GNU
单词?例如,String REGEX=“^(?=.*license)。*GNU”代码>?你是说GNU吗?谢谢,它非常有趣@WiktorStribiżew。所以让我试着让你的正则表达式合理化。句子开始,并向前看单词anything后跟“license”,然后是anything GNUThank you@mind。但我认为越“放松”越好。
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!");
}