2014-01-10 44 views
1

我想编写一个正则表达式,它将匹配名称的几个变体/常见用法之一。初学者正则表达式Java

我需要接受用户输入,&然后验证输入是否与列出的变体之一匹配。如果匹配,我需要输出匹配,如果不匹配,我应该输出输入不匹配。

这是我到目前为止有:

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 ***"); 
     } 




    } 
} 

我想一些帮助构成模式或者接受,将完成同样的事情替代方法的建议。

谢谢。

+1

为什么不能我的名字是 “(╯□°°)╯”?你是想把它抽象成通用名称验证器,还是只验证一个特定名称的变体? – tenub

+1

阅读[教程](http://docs.oracle.com/javase/tutorial/essential/regex/)。顺便说一句,只要字符串的任何部分与模式匹配,'match.find()'就会找到一个匹配。如果你想确保整个字符串在左边或右边没有多余的东西,使用'match.matches()'。 – ajb

+1

我会在这里使用'Set'来检查允许列表中的输入 – 2014-01-10 21:53:52

回答

3

此模式将匹配任何字符串DaimonDaimoDaidaimondaimoDAIMON的:

Pattern pattern = Pattern.compile("^([dD]aimon?|DAIMON|Dai)$"); 

或者稍微慷慨的模式将是这个样子

Pattern pattern = Pattern.compile("^dai(mon?)?$",Pattern.CASE_INSENSITIVE); 
+1

慷慨的模式也会匹配'dAiMon'等(这个评论意味着是信息) – nhahtdh

+0

@nhahtdh真的。这就是为什么称它更“慷慨”。如果OP确实需要将输入限制为仅*列表中指定的那些字符串,则第一种模式就足够了。 –

+0

非常感谢,非常感谢! 因此,如果我将上述模式设置为一个,那么如何使用if语句,即应该调用什么方法以及应传递哪个参数 - match.find(ARGUMENT)是正确的选项? –

2

我不会对你描述的情况使用正则表达式,我宁愿存储名称的可能变体,例如在一个列表将验证输入只是一个简单的包含。

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 ***"); 
    } 
} 

}

+0

感谢您的回应,但是我必须使用RegEx进行测试。 –

+0

呵呵它比改变一切!但是,欢迎你。 :) – shippi

相关问题