第 19 单元:正则表达式

测试您的理解情况

返回到第 19 单元

  1. 哪句话最恰当地描述了 ? 量化器?
    1. 匹配 0 或多次
    2. 匹配 1 或多次
    3. 匹配出现的结果并将匹配值附加到输出分组
    4. 匹配一次或完全不匹配
    5. 上述选项都不是
  2. 哪句话最恰当地描述了 + 量化器?
    1. 匹配 0 或多次
    2. 匹配 1 或多次
    3. 匹配出现的结果并将匹配值附加到输出分组
    4. 匹配一次或完全不匹配
    5. 上述选项都不是
  3. 哪句话最恰当地描述了 * 量化器?
    1. 匹配 0 或多次
    2. 匹配 1 或多次
    3. 匹配出现的结果并将匹配值附加到输出分组
    4. 匹配一次或完全不匹配
    5. 上述选项都不是
  4. 对或错:Matcher 类用于描述 Pattern 类的输入字符串。

    答案: 错误。Matcher 类用于匹配由 Pattern 类描述输入的正则表达式字符串。

  5. 哪个答案最恰当地描述了以下正则表达式字符串的应用:[A-Z]?\d
    1. 匹配从 A 到 Z 的任何字符 1 或多次,后跟一个可选的数字。
    2. 匹配从 A 到 Z 的任何字符 0 或多次,后跟一个可选的数字。
    3. 匹配从 A 到 Z 的任何字符 1 或多次,后跟一个数字。
    4. 匹配从 A 到 Z 的任何字符 0 或多次,后跟一个数字。
    5. 上述选项都不是。
  6. 检查以下代码,选择最恰当地描述了匹配结果(按顺序)的响应。

    @Test
    public void testFindMatches() {
       
       String input = "Do you run? Ran? No, bro, run! Bro, I ran and run.";
       
       String regex = "r[au]n";
       
       Pattern pattern = Pattern.compile(regex);
       Matcher matcher = pattern.matcher(input);
       
       int matchCount = 0;
       StringBuilder matchHolder = new StringBuilder();
       while (matcher.find()) {
       if (matchCount > 0) 
       matchHolder.append(',');
       matchHolder.append(matcher.group());
       matchCount++;
       }
       
       System.out.println("Matches: " + matchHolder.toString());
       
    }
    1. run,Ran,run,ran,run
    2. run,run,run,run
    3. run,ran,run,Ran,run
    4. run,run,ran,run
    5. 指定的模式与输入字符串的所有部分都不匹配。
  7. 编程练习,第 1 部分:创建一个新类(将它命名为 MyRegExMatcher),编写一个名为 matchesAll 的方法,该方法采用了两个参数(一个名为 regex 的字符串和一个名为 input 的字符串),并返回一个 boolean。现在编写返回 false 的方法。

    public class MyRegExMatcher {
       
       public boolean matchesAll(String regex, String input) {
          boolean ret = false;
          // TODO: write some code...
          return ret;
       }
    
    }
  8. 编程练习,第 2 部分:创建一个 JUnit 测试案例来调用您为问题 7 编写的方法。您的 JUnit 测试将使用您能想到的与此输入字符串匹配的最简单正则表达式来调用该方法:The quick brown fox jumped over the lazy dogs

    备注:该正则表达式可能仅包含量化器,而且必须仅包含字母 l 和 x(不含其他字母)。



    import static org.junit.Assert.assertTrue;
    
    import org.junit.Test;
    
    public class MyRegExMatcherTest {
    
       @Test
       public void testMatchesAll() {
          MyRegExMatcher classUnderTest = new MyRegExMatcher();
    
          String input = "The quick brown fox jumped over the lazy dogs";
          String regEx = ".*x.*l.*";
          boolean matches = classUnderTest.matchesAll(regEx, input);
          
          assertTrue(matches);
       }
  9. 编程练习,第 3 部分:实现问题 7 中的方法,使您的测试案例通过(如果测试案例未通过,那么您的正则表达式可能是错的)。如果整个输入字符串与正则表达式模式匹配,则返回 true,否则返回 false。提示:使用 Pattern 类和 Matcher 类,就像在 清单 1 中看到的一样。

    import java.util.regex.Matcher;
    import java.util.regex.Pattern;
    
    public class MyRegExMatcher {
       
       public boolean matchesAll(String regex, String input) {
          boolean ret = false;
          
          Pattern pattern = Pattern.compile(regex);
          Matcher matcher = pattern.matcher(input);
          
          ret = matcher.matches();
          return ret;
       }
    
    }

返回到第 19 单元