java正则表达式不工作
我正在尝试匹配来自用户的输入数据,并搜索是否与此输入匹配。 例如,如果用户类型为:A*B*C* 我想搜索所有以A开头并包含B和B的单词 我尝试了这个代码,它;s不工作:(获取输出为false)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]*$"; 我想你应该像这样在正则
谢谢。您需要在角色类中添加量词
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..看来我错了。我