用于在另一个关键字后面或后面显示关键字的Java正则表达式
Regex总是让我困惑。我想我知道的已经足够多了,但是当我试图使一个模式更加健壮时,我总是会遇到一些我不知道的情况
在java中,假设我有一个单词“BSD”。我想检测任何在单词“BSD”之前或之后有单词“license”的句子。“许可证”一词的出现是强制性的。 在Java正则表达式中如何做到这一点
这是据我所知
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());
# 1 楼答案
您可以使用以下命令检查字符串是否同时包含
license
和GNU
(或BSD
,您使用的内容取决于您的数据和需要匹配的内容)见this Java demo
模式匹配:
^
-字符串的开头(?=.*license)
-正向前瞻,在任何0+字符之后需要一系列文字字符license
(如果未使用dotall修饰符,则不包括换行字符).*
-任何0+个字符,直到最后一个GNU
-一个文本字符序列李># 2 楼答案
如果你只是想用一个正则表达式来检查组合“…GNU许可证…”以及“…许可GNU…”你可以试试这样:
它匹配任意数量的字符,后跟“GNU许可证”或“许可证GNU”,后跟任意数量的字符