【问题标题】:Need help on Regex return values [closed]需要有关正则表达式返回值的帮助 [关闭]
【发布时间】:2016-01-28 22:00:30
【问题描述】:

我的导师分配了一个正则表达式问题,他希望我们通过更改三个声明变量中的字符串值来使所有返回值都为真。这是我第一次做正则表达式问题,如果可以的话,我需要一点帮助。我试过 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


 }

}

【问题讨论】:

  • 基本上:你能做我的功课吗?简短回答:
  • 我不是想让人们做我的作业,我只是需要帮助解决这个问题,因为我不知道如何解决它。也许与其攻击我,不如给我指出我可以解决它的方向。
  • regex101.com 可能有助于设计您的正则表达式字符串
  • @xtremeslice 我知道您似乎受到了攻击,但我想向您保证这并不是真正发生的事情。您提出问题的方式并不是真正的 SO 运作方式。从尝试第一部分开始,当您有一个关于您的解决方案为什么不起作用的具体问题时,然后回来寻求帮助。
  • 哦,好吧,我试着弄清楚。谢谢

标签: java regex string


【解决方案1】:

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

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

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

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

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

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

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

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

【讨论】:

  • 非常感谢您的帮助!上帝保佑。
【解决方案2】:

在设计正则表达式字符串时,我喜欢首先将字符串的各个部分分类为相似的组件。让我们以 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 正则表达式的方式。

【讨论】:

  • 谢谢!我实际上正在阅读我的书,因为我使用的是 java 博士,所以我不得不重新格式化我编写正则表达式的方式(我认为)。这就是我想出的:\\d{3}-\\d{3}-\\d{4}。它和你的一样,但由于某种原因,除非我添加了额外的 \,否则它不会让我编译。感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-23
  • 1970-01-01
  • 1970-01-01
  • 2012-11-30
  • 2023-03-19
相关资源
最近更新 更多