正则表达式匹配Java中零个或一个单词的出现

时间:2016-03-07 12:42:02

标签: java regex capturing-group

我写了一个正则表达式来匹配以下模式:

hyphen后跟number后跟space后跟case insensitive keyword后跟可选space后跟char后跟任何TXT-234 #comment anychars的任何字符

E.g。

  
      
  1. TXT-234 anychars
  2.   
  3. (?<issueKey>^((\\s*[a-zA-Z]+-\\d+)\\s+)+)((?i)?<keyWord>#comment)?\\s+(?<comment>.*)
  4.   

我写的正则表达式如下:

mDrawer.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);

但是,即使我已经指定了&#39;?&#39;,上述内容并未捕获&#39; #comment&#39;的零次出现。为正则表达式。上例中的案例2总是失败,案例1成功。

关于我做错了什么的指示?

由于

2 个答案:

答案 0 :(得分:1)

#comment不匹配#keyword,这就是为什么你没有匹配尝试这个它应该工作

 ([a-zA-Z]*-\\d*\\s(((?i)#comment|#transition|#keyword)+\\s)?[a-zA-Z]*)

答案 1 :(得分:0)

这可能会有所帮助;

String str = "1. TXT-234 #comment anychars";
String str2 = "2. TXT-234 anychars";
String str3 = "3. TXT-2a34 anychars";
String str4 = "4. TXT.234 anychars";
Pattern pattern = Pattern.compile("([a-zA-Z]*-\\d*\\s(#[a-zA-Z]+\\s)?[a-zA-Z]*)");
Matcher m = pattern.matcher(str);
if (m.find()) {
    System.out.println("Found value: " + m.group(0));
    System.out.println("Found value: " + m.group(1));
    System.out.println("Found value: " + m.group(2));
}
m = pattern.matcher(str2);
if (m.find()) {
    System.out.println("Found value: " + m.group(0));
}
m = pattern.matcher(str3);
if (m.find()) {
    System.out.println("Found value: " + m.group(0));
} else {
    System.out.println("str3 not match");
}
m = pattern.matcher(str4);
if (m.find()) {
    System.out.println("Found value: " + m.group(0));
} else {
    System.out.println("str4 not match");
}