我想要编写一个正则表达式,它将与名称的几种变体/常见用法之一匹配。
我需要接受用户输入,&然后验证输入是否与列出的变体之一匹配。如果有匹配,我需要输出匹配,如果没有,我应该输出输入不匹配。
这是我到目前为止所做的:
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegExMyName {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println("Name: Daimon");
System.out.println("Common Usages: Daimon, Daimo, Dai, daimon, daimo, DAIMON");
System.out.println("Enter any of the variations listed only: ");
//*** HELP REQUIRED WITH PATTERN BELOW - pat
Pattern pat = Pattern.compile();
Matcher match = pat.matcher(scan.nextLine());
//***HELP REQUIRED WITH FIND BELOW
if (match.find()){
System.out.println("*** You entered a valid name ***");
}else{
System.out.println("*** You entered an invalid name ***");
}
}
}
我想帮助构建模式或接收可以完成同样事情的替代方法的建议。
感谢。
答案 0 :(得分:3)
此模式将匹配任何字符串Daimon
,Daimo
,Dai
,daimon
,daimo
,DAIMON
:
Pattern pattern = Pattern.compile("^([dD]aimon?|DAIMON|Dai)$");
或者稍微慷慨的模式看起来像这样
Pattern pattern = Pattern.compile("^dai(mon?)?$",Pattern.CASE_INSENSITIVE);
答案 1 :(得分:2)
对于您所描述的情况,我不会使用正则表达式,而是希望存储名称的可能变体,例如:在List中只使用一个简单的包含来验证输入。
List<String> daimons = Arrays.asList("Daimon", "Daimo", "Dai", "daimon", "daimo", "DAIMON");
我没有真正看到正则表达式的强大功能。如果我不认为你的解决方案可能是类似的东西:
公共类RegExMyName {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
List<String> daimons = Arrays.asList("Daimon", "Daimo", "Dai", "daimon", "daimo", "DAIMON");
StringBuilder diamonCommonUsage = new StringBuilder();
for(String daimonVariations : daimons) {
diamonCommonUsage.append(daimonVariations);
diamonCommonUsage.append(", "); //+ remove the last ","
}
System.out.println("Name: Daimon");
System.out.println("Common Usages: " + diamonCommonUsage.toString());
System.out.println("Enter any of the variations listed only: ");
if (match.find(daimons.contains(scan.nextLine()))){
System.out.println("*** You entered a valid name ***");
}else{
System.out.println("*** You entered an invalid name ***");
}
}
}