需要有关Regex返回值的帮助

时间:2016-01-28 22:00:30

标签: java regex string

我有一个由我的教师指定的正则表达式问题,他希望我们通过更改三个声明的变量中的字符串值来使所有返回值为true。这是我第一次做正则表达式问题,如果可以,我想要一些帮助。我试过www.regexpal.com,但我不知道如何使用它。 有人可以就这个主题如何开始解决这个问题吗?感谢

以下代码:

public class RegexTester {

 public static void main(String[] args) {

  String regexSSN = "";   //TODO add a regex for Social Security Numbers

  String regex9000 = "";  //TODO add a regex for GGC 9000 numbers here

  String regexZipPlus4 = ""; //TODO add a regex for zip+4 zipcodes here

  System.out.println("All of the following tests shoule return true, "
    + "the negative tests are negated (meaning that they should "
    + "also return true)");

  System.out.println("192-192-5555".matches(regexSSN)); // the following tests should all match
  System.out.println("444-183-1212".matches(regexSSN)); 
  System.out.println("032-431-9375".matches(regexSSN)); 
  System.out.println("122-650-4343".matches(regexSSN)); 
  System.out.println("900012389".matches(regex9000)); 
  System.out.println("900112389".matches(regex9000)); 
  System.out.println("900012390".matches(regex9000));
  System.out.println("900050000".matches(regex9000)); 
  System.out.println("30043".matches(regexZipPlus4)); 
  System.out.println("30043-1234".matches(regexZipPlus4)); 

  System.out.println(); // the following codes print out true

  System.out.println(!"192-XYZ-5555".matches(regexSSN)); // the following tests should NOT match
  System.out.println(!"00-192-5555".matches(regexSSN)); 
  System.out.println(!"90005000".matches(regex9000));        // too short!
  System.out.println(!"900250000".matches(regex9000));       // must be 9000* or 9001*
  System.out.println(!"9002500001".matches(regex9000));      // to big
  System.out.println(!"9001FOO00".matches(regex9000));       // no alpha allowed
  System.out.println(!"30043-12345".matches(regexZipPlus4));  // too long 
  System.out.println(!"300430-1234".matches(regexZipPlus4));  // too long 
  System.out.println(!"30043-12".matches(regexZipPlus4));     // too short
  System.out.println(!"300FO-1234".matches(regexZipPlus4));   // no alpha allowed
  System.out.println(!"30043=1234".matches(regexZipPlus4));   // missing hyphen


 }

}

2 个答案:

答案 0 :(得分:0)

在设计正则表达式字符串时,我喜欢首先将字符串的部分分类为类似的组件。让我们以SSN正则表达式为例。

第1步:我们看到格式为###-###-#####,其中#是数字0-9

第2步:匹配数字的正则表达式为[0-9]\d

第3步:现在我们可以在正则表达式\d\d\d-\d\d\d-\d\d\d\d中写出来,其中-只是一个文字冲刺。

第4步:注意重复?我们也可以使用{n}来处理这个问题,其中n是我们要重复上一部分的时间,所以现在我们有\d{3}-\d{3}-\d{4}

这就是你如何做SSN Regex。

答案 1 :(得分:0)

首先阅读java.util.regex.Pattern documentation。它包含完成作业所需的所有信息。在构造正则表达式模式时,您需要清楚地了解要求。然后,您可以将这些要求转换为正则表达式。

例如,匹配以下格式XXX-XXX-XXXX的电话号码,其中X是您需要的任何号码 3个数字后跟破折号,后跟3个数字,然后是另一个破折号,然后是4个数字:

$\d{3}\-\d{3}\-\d{4}$

请注意,在将此模式分配给Java字符串时,您需要转义特殊字符。

我喜欢使用RegexPlanet来测试我的代码。这是第一个问题的链接:regexSSN(虽然ssn应该是9位长,在你的代码中它是10个)。单击Go按钮。您将能够输入您的测试用例。

这是你的第一个案例的解决方案。

String regexSSN = "^(\\d{3}\\-\\d{3}\\-\\d{4})";

希望这会让你开始,这样你就可以完成其他两个问题。