正则表达式为:(?i)((^[aeiou])|(\s+[aeiou]))\w+?[aeiou]\b
问题是找出字符串arline ate eight apples and one orange while Anita hadn't any中符合上述正则表达式的匹配项。
用Java编程求解的结果是:
Match:arline
Match: ate
Match: one
Match: orange
Match: Anita
我不明白答案第一项也就是arline为什么匹配,arline前面又没有空格,它如何能匹配(^[aeiou])|(\s+[aeiou])呢?

解决方案 »

  1.   

    (^[aeiou])|(\s+[aeiou])
    ==========================================
    ^[aeiou] 匹配字符串开头是aeiou的其中一个字母
    \s+[aeiou] 匹配一个或多个空格后面跟着aeiou的其中一个字母
    | [或者]操作符
    (^[aeiou])|(\s+[aeiou]) 匹配两种情况的一种
      

  2.   


    "(?i)\\b(([^aeiou])|(\\s+[aeiou]))\\w+?[aeiou]\\b"
     ate
     one
     orange
     while
     Anita
      

  3.   

    (?i)在Java下意思为:“启用不区分大小写的匹配”
      

  4.   

    (?i)在Java下意思为:“启用不区分大小写的匹配”
      

  5.   

    2楼正解!现在问题基本上搞清楚了:^表示的是字符串的开头,所以^[aeiou]不应该理解为非元音字母([^aeiou]才是指非元音字母!),正如二楼所言,^[aeiou]的匹配项为字符串开头是元音的字母。