具有多级条件的Java字符串正则表达式

具有多级条件的Java字符串正则表达式,java,regex,string,Java,Regex,String,我想在字符串中查找字符串,下面是我的场景: String toMatch = "ABC"; String matchIn = "ABC*FED"; matchIn的其他变体: matchIn = "ABC"; matchIn = "ASD*ABC"; matchIn = "JULY*ABC*RTEW"; 我提出了这个正则表达式,但显然不起作用: matchIn.matches(".*(\\*)?" + toMatch + "(\\*)?.*"); 这里的问题是,我不知道如何查找“*”,只有

我想在字符串中查找字符串,下面是我的场景:

String toMatch = "ABC";
String matchIn = "ABC*FED";
matchIn的其他变体:

matchIn = "ABC";
matchIn = "ASD*ABC";
matchIn = "JULY*ABC*RTEW";
我提出了这个正则表达式,但显然不起作用:

matchIn.matches(".*(\\*)?" + toMatch + "(\\*)?.*");
这里的问题是,我不知道如何查找
“*”
,只有当它后面跟着另一个单词时。这样,它就可以匹配所有内容,例如。,
toMatch=“ABCDEF”
在不应该返回true时返回true

您可以使用类似正则表达式的

(?<=^|\*)ABC(?=$|\*)
输出:

"ABC" => true
"ASD*ABC" => true
"JULY*ABC*RTEW" => true
"ASDABC" => false

请参阅。

为什么ABC不够?我不明白你们到底想用*找到什么。您正在寻找ABC或更多?如果您只是在字符串中搜索字符串,那么就足够了。因为ABC不同于ABCDEF,“*”是一个分隔符。答案在,但没有
可能会有用。MCVE对一个有效的SO问题投了六张反对票,并且明确尝试解决该问题是一种耻辱。谢谢,你知道为什么它不能与String.matches一起使用吗?@nullpointer,因为
String#matches()
需要完整的字符串匹配。如果要查找部分匹配项,请不要使用它。^表示字符串的开头和$end,对吗?我不明白什么是?,str.startsWith(“ABC”)| str.indexOf(“*ABC”)>0也可以完成这项工作,而且可读性更好。这取决于您是为了学习正则表达式而提问,还是打算在生产中使用代码。
List<String> strs = Arrays.asList("ABC", "ASD*ABC", "JULY*ABC*RTEW", "ASDABC");
Pattern p = Pattern.compile("(?<=^|\\*)ABC(?=$|\\*)");
for (String str : strs) {
    Matcher m = p.matcher(str);
    System.out.println("\"" + str + "\" => " + m.find());
}
"ABC" => true
"ASD*ABC" => true
"JULY*ABC*RTEW" => true
"ASDABC" => false