java正则表达式不工作

java正则表达式不工作,java,regex,Java,Regex,我正在尝试匹配来自用户的输入数据,并搜索是否与此输入匹配。 例如,如果用户类型为:A*B*C* 我想搜索所有以A开头并包含B和B的单词 我尝试了这个代码,它;s不工作:(获取输出为false) 谢谢。您需要在角色类中添加量词 String envVarRegExp = "^A[^\r\n]*B[^\r\n]*C[^\r\n]*$"; 您需要将量词添加到角色类中 String envVarRegExp = "^A[^\r\n]*B[^\r\n]*C[^\r\n]*$"; 我想你应该像这样在正则

我正在尝试匹配来自用户的输入数据,并搜索是否与此输入匹配。 例如,如果用户类型为:A*B*C* 我想搜索所有以A开头并包含B和B的单词 我尝试了这个代码,它;s不工作:(获取输出为false)


谢谢。

您需要在角色类中添加量词

String envVarRegExp = "^A[^\r\n]*B[^\r\n]*C[^\r\n]*$";

您需要将量词添加到角色类中

String envVarRegExp = "^A[^\r\n]*B[^\r\n]*C[^\r\n]*$";

我想你应该像这样在正则表达式中使用
*
修饰符(对于A&B之间以及B&C之间的0个或更多匹配):

编辑:似乎您正在处理来自用户的输入,用户可以在输入中使用星号
*
。如果是这样的话,考虑一下:

String envVarRegExp = userInput.replace("*", ".*?");
其中
userInput
是如下字符串:

String userInput = "a*b*c*d*e";

我想你应该像这样在正则表达式中使用
*
修饰符(对于A&B之间以及B&C之间的0个或更多匹配):

编辑:似乎您正在处理来自用户的输入,用户可以在输入中使用星号
*
。如果是这样的话,考虑一下:

String envVarRegExp = userInput.replace("*", ".*?");
其中
userInput
是如下字符串:

String userInput = "a*b*c*d*e";

在这里你真的不需要正则表达式。简单的
String
类方法将起作用:-

String str = "AfasdBasdfCa";

if (str.startsWith("A") && str.contains("B") && str.contains("C")) {
    System.out.println("true");
}
请注意,这并不能确保您的
B
C
是按特定顺序排列的,我假设您不需要这样做,因为您没有提到这方面的任何内容

如果希望它们按某种顺序排列(如
B
C
之前),请使用以下正则表达式:-

if (str.matches("^A.*B.*C.*$")) {
    System.out.println("true");
}
请注意,
将匹配除
换行符
以外的任何字符。因此,您可以使用它来代替
[^\r\n]
,这一点更清楚。并且您需要使用量词
*
,因为在找到
B
C
之前,您需要匹配任何重复的字符


另外,
String.matches
匹配完整的字符串,因此,
在末尾锚定了

这里不需要正则表达式。简单的
String
类方法可以工作:-

String str = "AfasdBasdfCa";

if (str.startsWith("A") && str.contains("B") && str.contains("C")) {
    System.out.println("true");
}
请注意,这并不能确保您的
B
C
是按特定顺序排列的,我假设您不需要这样做,因为您没有提到这方面的任何内容

如果希望它们按某种顺序排列(如
B
C
之前),请使用以下正则表达式:-

if (str.matches("^A.*B.*C.*$")) {
    System.out.println("true");
}
请注意,
将匹配除
换行符
以外的任何字符。因此,您可以使用它来代替
[^\r\n]
,这一点更清楚。并且您需要使用量词
*
,因为在找到
B
C
之前,您需要匹配任何重复的字符



另外,
String.matches
匹配整个字符串,因此
在末尾锚定了

你所说的-
包含B和B是什么意思?
B和C是什么意思?
?你能再解释一下你要找什么吗?B和C可以按任何顺序排列吗?每个字母可以出现多少次?然后Rohit的答案是s应该可以很好地工作。你所说的-
包含B和B是什么意思?你是说
B和C
?你能再解释一下你要找的是什么吗?B和C可以按任何顺序排列吗?每个字母可以显示多少次?那么罗希特的答案应该可以很好地工作。@anubhava..是的,但是在操作中没有指定顺序。问题是,如果用户类型为abcde,我希望以动态方式构建表达式,我将使用不同的if语句,因此我需要正则表达式以动态方式构建它way@user1205079..然后请在OP中明确说明。如果有任何字符串,您希望匹配什么。目前还不清楚您希望从q中获得什么uestion.if(str.matches(“^A.*B.*C.*$”){System.out.println(“true”);}工作正常:)@user1205079..好的。但是如果你不介意任何特定的顺序,那么第一种方法在这里会更合适。因为使用
Regex
可能比第一种方法慢,因为
回溯
@anubhava..是的,但是OP中没有指定顺序。我想要构建express的问题如果用户类型为abcde,我将使用不同的if语句,因此我需要正则表达式以动态方式构建它way@user1205079..然后请在OP中明确指定。如果有任何字符串,您希望匹配什么。目前还不太清楚您希望从问题中得到什么。如果(str.matches(“^A.*B.*C.$”){System.out.println(“true”);}工作正常:)@user1205079..好的。但是如果您不介意任何特定的顺序,那么第一种方法在这里会更合适。因为使用
Regex
可能比第一种方法慢,因为
回溯
。我相信您希望在每个语句周围添加一些括号(A[^\r\n])*(B…)*(C…)*否则您只是在对[\r\n].@Scott yes此正则表达式是故意对任何不是
\r
且不是
\n
的东西进行
[^\r\n]*
处理的,即
[^\r\n]
为什么要用
正则表达式替换
*
@RohitJain使其成为一个有效的正则表达式,如
a.*b.*c.*d.*e
@anubhava.。似乎我错了。事实上,你得到了正确的解释,我不知道如何从这个问题中得到,这并不能解释它想要这个。不过,你解决了这个问题。我当然会给你一个
+1
。)我相信如果您想在每个语句(A[^\r\n])*(B…)*(C…)*周围添加一些括号,否则您只是在[\r\n].@Scott是的,这个正则表达式是有意地
*ing
任何不是
\r
的东西,而不是
\n
[^\r\n]*
为什么要用
正则表达式替换
*
@RohitJain使其成为一个有效的正则表达式,如
a.*b.*c.*d.*e
@anubhava..看来我错了。我