匹配 Java 中零次或一次出现的单词的正则表达式
A regular expression to match zero or one occurrence of a word in Java
我写了一个正则表达式来匹配以下模式:
任何字符后跟 hyphen
后跟 number
后跟 space
后跟可选的 case insensitive keyword
后跟 space
后跟任何 char
.
例如,
TXT-234 #comment anychars
TXT-234 anychars
我写的正则表达式如下:
(?<issueKey>^((\s*[a-zA-Z]+-\d+)\s+)+)((?i)?<keyWord>#comment)?\s+(?<comment>.*)
但是上面没有捕获零出现的“#comment”,即使我已经指定了“?”对于正则表达式。上面例子中的case 2总是失败,case 1成功。
我做错了什么?
#comment 与#keyword 不匹配。这就是为什么你没有比赛尝试。这个应该有效:
([a-zA-Z]*-\d*\s(((?i)#comment|#transition|#keyword)+\s)?[a-zA-Z]*)
这可能有帮助;
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");
}
我写了一个正则表达式来匹配以下模式:
任何字符后跟 hyphen
后跟 number
后跟 space
后跟可选的 case insensitive keyword
后跟 space
后跟任何 char
.
例如,
TXT-234 #comment anychars
TXT-234 anychars
我写的正则表达式如下:
(?<issueKey>^((\s*[a-zA-Z]+-\d+)\s+)+)((?i)?<keyWord>#comment)?\s+(?<comment>.*)
但是上面没有捕获零出现的“#comment”,即使我已经指定了“?”对于正则表达式。上面例子中的case 2总是失败,case 1成功。
我做错了什么?
#comment 与#keyword 不匹配。这就是为什么你没有比赛尝试。这个应该有效:
([a-zA-Z]*-\d*\s(((?i)#comment|#transition|#keyword)+\s)?[a-zA-Z]*)
这可能有帮助;
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");
}